具有帳戶 NT ServiceMSSQLSERVER 訪問的 SQL Server 2012 在域中被拒絕
幾個月前,我們在虛擬帳戶“ NT Service\MSSQLSERVER ”下在 Windows 2008 R2 中安裝了 SQL Server 2012,一切正常。
前幾天,IT 部門的一位管理員在 SQL Server 2012 上安裝了全文搜尋組件(問題是他記不起他在安裝過程中具體選擇了哪些設置),之後出現了不少問題:
**A.**我們查看了Windows Logs,在Application中,我們發現MSSQLServer有很多異常日誌,比如:
SQL Server 網路介面庫無法註冊服務主體名稱 (SPN)
$$ MSSQLSvc/FooComputer.FooDomain.com:1433 $$用於 SQL Server 服務。Windows 返回程式碼:0xffffffff,狀態:63。未能註冊 SPN 可能會導致集成身份驗證使用 NTLM 而不是 Kerberos。這是一條情報資訊。僅當身份驗證策略需要 Kerberos 身份驗證並且尚未手動註冊 SPN 時,才需要執行進一步操作。
這似乎是原因,但不知道為什麼以及如何解決它。
**B.**擁有像 (“MyDomain\FooUser”) 這樣的域使用者所有者的 SQL 作業將失敗,並顯示以下消息:
作業失敗。無法確定作業 JOBNAME 的所有者 (MyDomain\FooUser) 是否具有伺服器訪問權限(原因:無法獲取有關 Windows NT 組/使用者“MyDomain\FooUser”的資訊,錯誤程式碼 0x6e。
$$ SQLSTATE 42000 $$(錯誤 15404))。
我們進行了深入的搜尋,最終將所有者替換為“sa”並解決了問題,雖然它不是那麼體面。不過,我們想找出原因。
**C.**不能像其他電腦的文件夾一樣訪問網路資源,例如下面的sql會返回“access is denied”:
DECLARE @CopyCommand nvarchar(1000) set @CopyCommand = 'dir ' + Char(34) + '\\FooComputer\FooFolder\' + Char(34) EXEC master..xp_cmdshell @CopyCommand
對於問題 C,根據 MSDN(http://technet.microsoft.com/en-us/library/ms143504.aspx),我們嘗試授予帳戶“MyDomain\SQLServerComputerName$”對文件夾的完全控制訪問權限,仍然相同結果。
這三個問題都是因為執行SQL服務的賬號不是域賬號造成的,都可以通過將SQL改成域賬號執行來解決。具體來說:
A - SPN 是需要域帳戶的 Kerberos 安全功能,不適用於本地帳戶
B - 為了從活動目錄中讀取,該服務需要域帳戶的憑據
C - 遠端電腦無法辨識本地帳戶,因此它們拒絕連接嘗試。
以下是有關如何更改服務帳戶的演練: