2017-04-21 261 views
2

我在Windows Server 2012 R2(也是AD DC)上安裝了SQL Server 2014。當我嘗試使用SQL Server Management Studio中(SSMS)從同一本地域中的客戶端桌面連接到它,我得到這個錯誤信息:SetSPN無法找到帳戶

The target principal name is incorrect. Cannot generate SSPI context. (Microsoft SQL Server) 

所以就同一問題下面的其他職位,我下載的Kerberos SQL服務器上的配置管理器發現2個錯位的SPN。是由Kerberos配置管理器提出的SPN腳本命令如下:

SetSPN -d "MSSQLSvc/SERVERNAME.internal.domain.com" "internal\SERVERNAME$" 
SetSPN -s "MSSQLSvc/SERVERNAME.internal.domain.com" "DOMAIN\SERVERNAME$" 

但是,當我試圖在服務器上運行在cmd中的第一個命令(下稱「的SetSPN -D」之一),我得到這個錯誤:

FindDomainForAccount: Call to DsGetDcNameWithAccountW failed with return value 0x0000054B 
Unable to locate account SERVERNAME$ 

我不知道如何從這裏前進。谷歌搜索沒有找到正確的答案。請幫忙。問題是:

1)錯位SPN是罪魁禍首嗎?如果是這樣,如何糾正?

2)如果不是,我如何使用Windows身份驗證從同一本地域上的客戶端桌面連接到SQL Server?

+0

你有使用SQL登錄訪問的問題嗎?你有本地訪問的問題,你RDP到那個Windows機器,打開SSMS,Windows認證,打開選項改變網絡協議從默認到tcp? – Wendy

+0

@ Wendy本地訪問沒問題。我在服務器上安裝了SSMS,並且工作正常。當我嘗試在客戶端Windows桌面上使用SQL登錄(用戶名/密碼)進行登錄時,它只是說'無法連接到SERVERNAME。用戶'xxx''的登錄失敗。當我在本地使用SSMS並右鍵單擊服務器名稱時,Properties - > Connections:允許遠程連接到此服務器已啓用。在Sql Server配置管理器中,SQL Server網絡配置 - > SERVERNAME的Protocals啓用了TCP/IP ...我還應該嘗試什麼?謝謝! – Zhang18

+0

當本地訪問時,SSMS不使用TCP連接SQL Server。 '連接到服務器',有選項>>按鈕,將網絡協議從默認改爲tcp。如果你能進入。檢查用戶'xxx'是否有權訪問,如果沒有添加它並給予權限然後嘗試遠程使用這個用戶ID訪問。 – Wendy

回答

3

按我最新的留言@ T鷺的回答, internal\SERVERNAME$帳戶確實存在而不是。它應該是internal.domain.com\SERVERNAME$,與DOMAIN\SERVERNAME$的帳戶相同,其中DOMAINinternal.domain.com的Windows 2000以前的名稱。

其結果是,該錯位的 SPN所確定的Kerberos配置管理器不是初始錯誤消息的根本原因:The target principal name is incorrect. Cannot generate SSPI context. (Microsoft SQL Server)

到初始問題的解決方案從this post,其中執行若干步驟來在客戶端和服務器端解決問題。

1

確保您從加入Active Directory域的計算機運行腳本,並且計算機的DNS正確解析爲AD。要查找SERVERNAME $,計算機需要詢問DNS查詢Active Directory域控制器的位置。 SPN腳本也是錯誤的。

  1. 擺脫引號,在這種情況下不需要它們,特別是在沒有嵌入空格的情況下。
  2. 確保您是登錄到內部爲了運行第一個命令。第二條命令在登錄時運行DOMAIN

    我想建議的腳本:

SetSPN -d "MSSQLSvc/SERVERNAME.internal.domain.com" "internal\SERVERNAME$" 
SetSPN -s "MSSQLSvc/SERVERNAME.internal.domain.com" "DOMAIN\SERVERNAME$" 

應該是這個:

SetSPN -d MSSQLSvc/SERVERNAME.internal.domain.com internal\SERVERNAME$ 
SetSPN -s MSSQLSvc/SERVERNAME.internal.domain.com DOMAIN\SERVERNAME$ 

我只是測試在我的環境中的第二行和它的工作。我不需要混淆我的測試環境,因此它實際上是以下幾點:

SetSPN -s MSSQLSvc/dc1.dev.local DEV\dc1$ 

...和結果:

Checking domain DC=dev,DC=local 

    Registering ServicePrincipalNames for CN=DC1,OU=Domain Controllers,DC=dev,DC=local 
      MSSQLSvc/dc1.dev.local 
    Updated object 

    C:\> 
+0

我實際上在SQL Server本地運行Keberos配置管理器(這也是AD DC--不理想,但這是我的設置),因此我也在本地運行建議的腳本。 – Zhang18

+0

逗號是一個錯字,已更正。我刪除了部分域名混淆。第一級實際上是「內部」,而有問題的命令(一個帶有-d)具有「內部」作爲域名(這是奇怪的部分)。第二個命令(-s)總是運行良好,從來沒有出現過問題 - 但它本身並沒有解決我*錯位的SPN *問題... – Zhang18

+0

相應地編輯了答案。確保您已登錄到* internal *域以運行第一條命令。 –