使用整合式驗證

下載 ODBC 驅動程式

Linux 與 macOS 上的 Microsoft ODBC Driver for SQL Server 支援使用 Kerberos 整合式驗證的連線。 其支援 MIT Kerberos 金鑰發佈中心 (KDC) 並可使用一般安全性服務應用程式開發介面 (GSSAPI) 和 Kerberos v5 程式庫。

從 17.6 版開始,該驅動程式也支援搭配使用 同盟帳戶 之 Microsoft Entra ID ( 前身為 Azure Active Directory ) 的整合式驗證,雖然系統程式庫限制仍會適用。 如需詳細資訊,請參閱 Microsoft Entra ID

使用整合式驗證從 ODBC 應用程式連線至 SQL Server

您可以透過在 SQLDriverConnectSQLConnect 的連接字串中指定 Trusted_Connection=yes,來啟用 Kerberos 整合驗證。 例如:

Driver='ODBC Driver 18 for SQL Server';Server=your_server;Encrypt=yes;Trusted_Connection=yes  

使用 DSN 連線時,您也可以將 Trusted_Connection = yes 新增至 odbc.ini 中的 DSN 項目。

sqlcmd-E 選項和 bcp-T 選項也可以用來指定整合式驗證;如需詳細資訊,請參閱使用 sqlcmd 進行連線使用 bcp 進行連線

請確定要連線到 SQL Server 的用戶端主體已使用 Kerberos KDC 進行驗證。

ServerSPNFailoverPartnerSPN 不受支援。

部署設計成以服務的形式執行的 Linux 或 macOS ODBC Driver 應用程式

系統管理員可以部署應用程式,以作為使用 Kerberos 驗證連線至 SQL Server 的服務執行。

您必須先在用戶端上設定 Kerberos,然後確定應用程式可使用預設主體的 Kerberos 認證。

請確定您透過以下其中一種方法,使用 kinit 或 PAM (插入式驗證模組) 獲取並快取連線使用的主體 TGT:

  • 執行 kinit,傳入主體名稱和密碼。

  • 執行 kinit,傳入主體名稱,以及包含 ktutil 所建立主體金鑰的 keytab 檔案位置。

  • 確定系統登入作業使用 Kerberos PAM (插入式驗證模組) 所完成。

當應用程式作為服務執行時,因為 Kerberos 認證依設計到期,請更新認證以確保服務可持續使用。 ODBC 驅動程式不會自行更新;請確定有定期執行的 cron 作業或指令碼會在認證到期之前加以更新。 若不想在每次進行此更新時都需要密碼,您可以使用 keytab 檔案。

Kerberos 的設定和用法 詳細說明如何在 Linux 上 Kerberize 服務。

追蹤對資料庫的存取

使用系統帳戶透過整合式驗證存取 SQL Server 時,資料庫管理員可以建立資料庫存取的稽核線索。

登入 SQL Server 會使用系統帳戶,且 Linux 上沒有模擬資訊安全內容的功能。 因此,需要有更多線索來判別使用者。

若要代表系統帳戶以外的使用者稽核 SQL Server 中的活動,應用程式必須使用 Transact-SQL EXECUTE AS

若要改善應用程式效能,應用程式可以將連接共用與整合式驗證和稽核搭配使用。 不過,結合連線共用、整合驗證和稽核會產生安全性風險,原因是 unixODBC 驅動程式管理員允許不同使用者重複使用共用連線。 如需詳細資訊,請參閱 ODBC 連接共用

在重複使用前,應用程式必須執行 sp_reset_connection 來重設共用連線。

使用 Active Directory 管理使用者身分識別

應用程式系統管理員不需要管理 SQL Server 的個別登入認證集。 Active Directory 可以設定為整合式驗證的金鑰發佈中心 (KDC)。 如需詳細資訊,請參閱 Microsoft Kerberos

使用連結的伺服器和分散式查詢

開發人員可以部署使用連結的伺服器或分散式查詢的應用程式,而無需資料庫管理員負責維護個別的 SQL 認證集。 在此情況下,開發人員必須設定應用程式以使用整合驗證:

  • 使用者登入用戶端電腦,並向應用程式伺服器進行驗證。

  • 應用程式伺服器會以不同的資料庫進行驗證,並連線到 SQL Server。

  • SQL Server 會以資料庫使用者的身分向另一個資料庫 (SQL Server) 進行驗證。

在設定整合式驗證之後,認證將會傳遞至連結的伺服器。

整合式驗證和 sqlcmd

若要使用整合式驗證存取 SQL Server,請使用 sqlcmd-E 選項。 請確定執行 sqlcmd 的帳戶與預設的 Kerberos 用戶端主體建立關聯。

整合式驗證和 bcp

若要使用整合式驗證存取 SQL Server,請使用 bcp-T 選項。 請確定執行 bcp 的帳戶與預設的 Kerberos 用戶端主體建立關聯。

-T-U-P 選項搭配使用是錯誤的。

SQL Server 所註冊 SPN 支援的語法

SPN 在連接字串或連線屬性中使用的語法如下:

語法 描述
MSSQLSvc/fqdn:port 使用 TCP 時,此為提供者產生的預設 SPN。 port 是 TCP 通訊埠編號。 fqdn 是完整的網域名稱。

使用 Active Directory 驗證 Linux 或 macOS 電腦

若要設定 Kerberos,請將資料輸入至 krb5.conf 檔案。 krb5.conf 位於 export KRB5_CONFIG=/home/dbapp/etc/krb5.conf 中,但是您可以使用語法範例 /etc/ 參考另一個檔案。 下列為 krb5.conf 檔案範例:

[libdefaults]  
default_realm = YYYY.CORP.CONTOSO.COM  
dns_lookup_realm = false  
dns_lookup_kdc = true  
ticket_lifetime = 24h  
forwardable = yes  
  
[domain_realm]  
.yyyy.corp.contoso.com = YYYY.CORP.CONTOSO.COM  
.zzzz.corp.contoso.com = ZZZZ.CORP.CONTOSO.COM  

如果您的 Linux 或 macOS 電腦設定為使用動態主機設定通訊協定 (DHCP),且 Windows DHCP 伺服器提供 DNS 伺服器來使用,則您可以使用 dns_lookup_kdc=true。 現在,您可以發出命令 kinit alias@YYYY.CORP.CONTOSO.COM,使用 Kerberos 登入您的網域。 傳遞至 kinit 的參數會區分大小寫,且設定要在網域中的 SQL Server 電腦必須新增該使用者 alias@YYYY.CORP.CONTOSO.COM 才能進行登入。 現在,您可以使用信任連接 (連接字串中的 、bcp -Tsqlcmd -E)。

Linux 或 macOS 電腦上時間與 Kerberos 金鑰發佈中心 (KDC) 上的時間必須很接近。 請確認您的系統時間設定正確,例如使用 Network Time Protocol (NTP)。

如果 Kerberos 驗證失敗, Linux 或 macOS 上的 ODBC 驅動程式不會使用 NTLM 驗證。

如需使用 Active Directory 驗證 Linux 或 macOS 電腦的詳細資訊,請參閱使用 Active Directory 驗證 Linux 用戶端。 如需設定 Kerberos 的詳細資訊,請參閱 MIT Kerberos 文件

另請參閱

程式設計指導方針

版本資訊

使用 Microsoft Entra ID。