使用整合式驗證
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
您可以透過在 SQLDriverConnect 或 SQLConnect 的連接字串中指定 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 進行驗證。
ServerSPN 和 FailoverPartnerSPN 不受支援。
部署設計成以服務的形式執行的 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 -T 或 sqlcmd -E)。
Linux 或 macOS 電腦上時間與 Kerberos 金鑰發佈中心 (KDC) 上的時間必須很接近。 請確認您的系統時間設定正確,例如使用 Network Time Protocol (NTP)。
如果 Kerberos 驗證失敗, Linux 或 macOS 上的 ODBC 驅動程式不會使用 NTLM 驗證。
如需使用 Active Directory 驗證 Linux 或 macOS 電腦的詳細資訊,請參閱使用 Active Directory 驗證 Linux 用戶端。 如需設定 Kerberos 的詳細資訊,請參閱 MIT Kerberos 文件。