SQL Server 連結伺服器的 Windows 身份驗證
目前,在我們的項目中,我們有一個情況:域 A 中有一個 SQL Server 2012 實例 IA,域 B 中有一個 MS SQL Server 2012 實例 IB。域 A 和 B 是受信任的。IB 配置為 IA 的連結伺服器。
您能否提供一個想法,如何配置 Windows 身份驗證安全上下文從實例 IA 到 IB 的“轉發”,以及這樣做的要求是什麼?它是對連結伺服器使用 Kerberos 委派的唯一方法,還是它們位於受信任域中就足夠了?
更新:
有一個問題……很明顯,Kerberos 委託可以用於此,但其他方式呢?這不適用於我們的案例,因為不同 Active Directory 域控制器之間的 Kerberos 委派僅在兩個 od 域控制器都位於作業系統 Windows 12+ 的電腦上時才有效(不是我們的案例)。位於受信任域中的 SQL Server 實例可能就足夠了。如果客戶端應用程序與 SQL Server 實例 IA 位於同一台伺服器上,那麼在沒有 SPN 配置等的情況下一切正常。但是當客戶端應用程序位於其他伺服器上(不同於 IA 和 IB)時,情況如何?
據我所知,您可以在伺服器之間傳遞 Windows 憑據的唯一方法是通過委託,正如您已經看過的那樣。如果確實無法讓委派在您的環境中工作,則委派的替代方法是將您的域帳戶映射到遠端伺服器上的 SQL 身份驗證帳戶,這些帳戶設置的權限與您的需要相當。這裡的缺點是遠端執行的任何查詢都將記錄到 SQL 身份驗證帳戶而不是您的 AD 帳戶,因此除非您煞費苦心地將一對一的 SQL 身份驗證帳戶映射到 AD 帳戶,否則審核將不會那麼透明。
要將 AD 帳戶映射到遠端 SQL Authenticated 帳戶,您首先需要在遠端伺服器上創建 SQL Authenticated 帳戶,然後配置本地登錄以映射到連結伺服器上的它們。如果您樂於使用 GUI,您可以在Server Objects → Linked Servers → Linked Server Name → Properties → Security Page 下找到此視窗:
如果您更喜歡 TSQL,則可以通過sp_addlinkedsrvlogin儲存過程執行相同的功能。
最後注意這裡:因為您沒有委託設置,所以您需要取消選中Impersonate複選框,或者如果您使用的是 TSQL,
@useself
則應傳入參數,FALSE
否則它將嘗試通過身份驗證,而不會在您的場景中工作。