Sql-Server

您需要哪種 SPN / AD 電腦委派來將憑據委派給連接到文件共享的連結伺服器?

  • April 6, 2016

在此處輸入圖像描述

這裡的想法是執行雙跳並將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時,它會產生上面的錯誤消息。

我也知道我可以列出已經設置的 SPNsetspn -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;

如果這顯示Kerberosauth_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 共享時模擬您 - 因此您的帳戶需要訪問它。

引用自:https://dba.stackexchange.com/questions/134515