Kerberos 身份驗證不適用於 SQL Server 2012 中的連結伺服器
我正在使用 2 個在 Windows Server 2012 上執行 SQL Server 2012 的 SQL Server 設置 DEV/TEST 環境。我們正在從 Windows Server 2008 上的 SQL Server 2005 遷移,我們已經在其中正確啟動和執行。
在 SQL Server 2012 中,Kerberos 身份驗證不起作用。
每台伺服器都有自己的 Active Directory 帳戶,該帳戶具有通過 Active Directory 使用者和電腦授予的“寫入服務主體名稱”和“讀取服務主體名稱”權限。每當我連接到 SQL Server 2005 伺服器並執行:
SELECT net_transport, auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SPID;
我懂了:
net_transport auth_scheme TCP KERBEROS
當我對新的 SQL Server 2012 實例執行相同的查詢時,我看到:
net_transport auth_scheme TCP NTLM
如果我使用
SetSPN -Q MSSQLSvc/*
在活動域中查詢服務主體名稱,我會看到列出的 2005 和 2012 伺服器,除了伺服器名稱外,其他方式完全相同。例如:
MSSQLSvc/SERVERa2005.domain.inet MSSQLSvc/SERVERa2005domain.inet:1433 MSSQLSvc/SERVERb2005.domain.inet MSSQLSvc/SERVERb2005domain.inet:1433 MSSQLSvc/SERVERa2012.domain.inet MSSQLSvc/SERVERa2012domain.inet:1433 MSSQLSvc/SERVERb2012.domain.inet MSSQLSvc/SERVERb2012domain.inet:1433
我還需要做什麼才能啟用對 SQL Server 2012 的 Kerberos 身份驗證?Books Online 似乎沒什麼可說的,除了必須設置 SPN。很明顯,他們是。兩台 2012 機器上的 SQL Server 錯誤日誌都說:
2012-12-10 14:55:47.630 The SQL Server Network Interface library successfully registered the Service Principal Name (SPN) [ MSSQLSvc/SERVERa2012.domain.inet ] for the SQL Server service. 2012-12-10 14:55:47.630 The SQL Server Network Interface library successfully registered the Service Principal Name (SPN) [ MSSQLSvc/SERVERa2012.domain.inet:1433 ] for the SQL Server service. 2012-12-10 14:55:47.590 SQL Server is attempting to register a Service Principal Name (SPN) for the SQL Server service. Kerberos authentication will not be possible until a SPN is registered for the SQL Server service. This is an informational message. No user action is required.
處理 Active Directory 總是那麼有趣。這裡最重要的一點是要意識到您正在處理可能需要時間在網路中傳播的分佈式數據。
作為升級過程的一部分,相關 SQL Server 的名稱已更改;我們用執行 SQL Server 2012 的新機器 (SQL03) 替換了執行 SQL Server 2005 的現有機器 (SQL01)。SQL03 是我最初在域中設置新機器時的名稱。SQL01 有一個與單個域帳戶相關聯的現有 SPN,我們用於多個執行 2005 的 SQL Server。由於最佳做法是僅在任何給定域帳戶下執行單台電腦,因此我創建了一個新帳戶並將 SQL03 配置為使用該帳戶執行帳戶名稱。將原來的 SQL01 停止服務,並將 SQL03 重命名為 SQL01 後,出現了 SPN 衝突。
我使用 SetSPN.exe 實用程序刪除了有衝突的 SPN(在舊域帳戶上) - 它仍然無法正常工作。在這一點上,我什麼也沒做,繼續做其他項目。大約 30 分鐘後我回來時,KERBEROS 身份驗證正在工作。我只需要等待 SPN 更改在我們的域控制器之間傳播。
我使用
SetSPN -L DOMAIN\Account
該輸出並將其與SetSPN -Q MSSQLSvc/Machine.domain.inet:1433
找到重複的 SPN 進行比較,然後用於SetSPN -D MSSQLSvc/Machine.domain.inet:1433 DOMAIN\Account
刪除舊的 SPN。