您需要哪種 SPN / AD 電腦委派來將憑據委派給連接到文件共享的連結伺服器?
這裡的想法是執行雙跳並將
leeand00@example.org
已發送到SQL2.example.org
伺服器的客戶端 () 憑據委託給 SQL3.example.org (誠然,這是一個 SMB 文件共享而不是SQL Server
我的信念是我需要委派憑據才能訪問文件共享,因為我在嘗試訪問SQL2 伺服器上的VIEW時收到錯誤消息,該伺服器使用指向 SMB的VFPOLEDB 提供程序從連結伺服器中提取在沒有 SPN 設置的情況下使用KERBEROS auth_scheme與客戶端連接時在 SQL3 上共享是:
OLE DB provider "VFPOLEDB" for linked server "LINKEDSERVERNAME" returned message "Invalid path or file name.". Msg 7303, Level 16, State 1, Procedure hatsum, Line 5 Cannot initialize the data source object of OLE DB provider "VFPOLEDB" for linked server "LINKEDSERVERNAME".
因此,這使我相信 SQL2 和 SQL3 電腦上正確埠上的 SPN 會將客戶端憑據委託給 SMB 共享。(當然使用約束委派……)
知道我需要什麼樣的 SPN / AD 電腦委派設置來完成這項工作嗎?
請注意,當使用任何其他類型的 auth_scheme 進行連接時,無論是 NTLM 還是 SQL,我都可以毫無問題地查詢連結伺服器;但是當使用KERBEROS auth_scheme時,它會產生上面的錯誤消息。
我也知道我可以列出已經設置的 SPN
setspn -l <server-name>
SQL Server 只需要一種服務主體名稱。
MSSQLSvc/<servername>:<portname>
通常需要執行兩次,一次用於短名稱,一次用於長名稱。例如,如果 SQL Server 名為“SQLServer1.somedomain.com”並且在埠 1433 上執行,那麼您需要:
MSSQLSvc/SQLServer1.somedomain.com:1433 MSSQLSvc/SQLServer1:1433
Active Directory 中的電腦帳戶
SQLServer1.somedomain.com
應被授予委派安全性的能力。一旦它正常工作,您可以通過查看以下內容來確認 Kerberos 身份驗證是否正常工作:SELECT InstanceName = @@SERVERNAME , InstancePortNumber = dec.local_tcp_port , dec.auth_scheme FROM sys.dm_exec_connections dec WHERE dec.session_id = @@SPID;
如果這顯示
Kerberos
在auth_scheme
列中,則 Kerberos 身份驗證正在工作。如果在連結伺服器的另一端有第二個 SQL Server,則可以在連結伺服器上執行該查詢:DECLARE @cmd NVARCHAR(MAX); SET @cmd = 'SELECT InstanceName = @@SERVERNAME , InstancePortNumber = dec.local_tcp_port , dec.auth_scheme FROM sys.dm_exec_connections dec WHERE dec.session_id = @@SPID; '; EXEC [linked_server_name].tempdb.sys.sp_executesql @cmd;
該錯誤消息讓我認為您遇到了文件共享權限問題 - 使用 Kerberos SQL Server 時會在訪問 SMB 共享時模擬您 - 因此您的帳戶需要訪問它。