2015-08-31 339 views
12

我正努力從計算機A獲得SQL Server連接到運行SQL Server的計算機B.目標主體名稱不正確。無法生成SSPI上下文

我已經Google廣泛搜索,所有我發現的東西都沒有奏效。他們也不會一步一步地引導你解決這個問題。

我們沒有使用Kerberos,而是配置了NTLM。

enter image description here

涉及的機器(XX是用來掩蓋一些機器名的出於安全目的):

  • xxPRODSVR001 - 在Windows Server 2012域控制器
  • xxDEVSVR003 - Windows Server 2012(本機發生錯誤)
  • xxDEVSVR002 - Windows Server 2012中(本機運行SQL Server 2012)

以下SPN的註冊到DC(xxPRODSVR001)。我模糊了與YYY域爲安全起見:

註冊ServicePrincipalNames爲CN = xxDEVSVR002,CN =電腦,DC = YYY,DC =本地:

  MSSQLSvc/xxDEVSVR002.yyy.local:49298 

      MSSQLSvc/xxDEVSVR002.yyy.local:TFS 

      RestrictedKrbHost/xxDEVSVR002 

      RestrictedKrbHost/xxDEVSVR002.yyy.local 

      Hyper-V Replica Service/xxDEVSVR002 

      Hyper-V Replica Service/xxDEVSVR002.yyy.local 

      Microsoft Virtual System Migration Service/xxDEVSVR002 

      Microsoft Virtual System Migration Service/xxDEVSVR002.yyy.local 

      Microsoft Virtual Console Service/xxDEVSVR002 

      Microsoft Virtual Console Service/xxDEVSVR002.yyy.local 

      SMTPSVC/xxDEVSVR002 

      SMTPSVC/xxDEVSVR002.yyy.local 

      WSMAN/xxDEVSVR002 

      WSMAN/xxDEVSVR002.yyy.local 

      Dfsr-12F9A27C-BF97-4787-9364-D31B6C55EB04/xxDEVSVR002.yyy.local 

      TERMSRV/xxDEVSVR002 

      TERMSRV/xxDEVSVR002.yyy.local 

      HOST/xxDEVSVR002 

      HOST/xxDEVSVR002.yyy.local 

爲CN = xxDEVSVR003註冊ServicePrincipalNames, CN =電腦,DC = YYY,DC =本地:

  MSSQLSvc/xxDEVSVR003.yyy.local:1433 

      MSSQLSvc/xxDEVSVR003.yyy.local 

      Hyper-V Replica Service/xxDEVSVR003 

      Hyper-V Replica Service/xxDEVSVR003.yyy.local 

      Microsoft Virtual System Migration Service/xxDEVSVR003 

      Microsoft Virtual System Migration Service/xxDEVSVR003.yyy.local 

      Microsoft Virtual Console Service/xxDEVSVR003 

      Microsoft Virtual Console Service/xxDEVSVR003.yyy.local 

      WSMAN/xxDEVSVR003 

      WSMAN/xxDEVSVR003.yyy.local 

      TERMSRV/xxDEVSVR003 

      TERMSRV/xxDEVSVR003.yyy.local 

      RestrictedKrbHost/xxDEVSVR003 

      HOST/xxDEVSVR003 

      RestrictedKrbHost/xxDEVSVR003.yyy.local 

      HOST/xxDEVSVR003.yyy.local 

現在,如果只有SQL Server錯誤消息是更具描述性的,並告訴我什麼主體名稱有人嘗試連接到我可能能夠診斷這一點。

那麼,任何人都可以通過如何解決這個問題,或者你能看到我提供的是錯誤的東西嗎?

我很樂意生成更多的調試信息,只是告訴我你需要什麼。

+0

我們不運行內部DNS服務器。但是爲了消除這個問題,你說我應該「ping -a x.x.x.x」或者有另一種方法來確定是否有重複項? – TheEdge

+0

我不是專家,但我認爲SPN和SSPI是一個Kerberos的東西?你確定你沒有使用Kerberos嗎? –

+0

@DylanSmith不是我可以看到.....當我在SQL Server中運行SP(現在忘記名字)時,它全部成爲NTLM。你知道我如何檢查? – TheEdge

回答

1

SSPI上下文錯誤肯定表示正在嘗試使用kerberos進行身份驗證。

檢查安全事件日誌,如果您使用kerberos,您應該看到使用身份驗證軟件包進行登錄嘗試:Kerberos。

NTLM身份驗證可能失敗,因此正在進行Kerberos身份驗證嘗試。您可能還會在安全事件日誌中看到NTLM登錄嘗試失敗?

您可以打開dev中的kerberos事件日誌記錄來嘗試調試kerberos失敗的原因,雖然它非常冗長。

1

因爲我在尋找解決方案時遇到自己的問題,所以我會在這裏分享我的解決方案,以防其他人也來到這裏。

我連接到SQL Server的罰款,直到我的機器被移動到另一個辦公室另一個域。然後,在切換之後,我得到了關於目標主體名稱的這個錯誤。使用完全限定名稱連接的固定內容如:server.domain.com。實際上,一旦我以這種方式連接到第一臺服務器,我就可以使用服務器名稱連接到其他服務器(沒有完整的資格證書),但是您的里程可能會有所不同。

+0

當我向SQL連接添加證書時,此問題只發生在我身上。該證書已頒發給FQDN,因此,當我連接到FQDN \ Instance時,它就起作用了。 –

2

我只是碰到了這一點,並通過做兩件事固定它:

  1. 授予讀/寫的servicePrincipalName權限使用ADSI編輯服務帳戶,如https://support.microsoft.com/en-us/kb/811889
  2. 描述拆卸的SPN以前存在使用

    setspn -D MSSQLSvc/HOSTNAME.domain.name.com:1234 HOSTNAME 
    

    磨片在SQL Server 計算機帳戶(相對於服務帳戶) re 是實例使用的端口號(我的不是默認實例)。

1

我今天遇到了這個問題,想分享我的問題,因爲這個問題很容易被忽略,而且很容易解決。

我們管理我們自己的rDNS,並最近重新編輯我們的服務器命名方案。作爲其中的一部分,我們應該更新我們的rDNS並忘記這麼做。

一個ping打開了正確的主機名,但是一個ping -a返回了錯誤的主機名。簡單修復:更改rDNS,做一個ipconfig/flushdns,等待30秒(只是我做的事情),做另一個ping -a,看到它解決正確的主機名,連接...利潤。

3

登錄到這兩個SQL箱和你的客戶和類型:

ipconfig /flushdns 
nbtstat -R 

如果不工作,更新您的客戶端機器上的DHCP ......這項工作2電腦在我們的辦公室。

+0

在我的客戶端機器和SQL框上加上'ipconfig/release'和'ipconfig/renew'在我的客戶端機器上做了你的回答,並且它不適用於我;( – AlbatrossCafe

0

我就遇到了這個問題的一種變體,這裏是特點:

  • 用戶能夠成功連接命名實例,例如,Server\Instance連接成功
  • 用戶是無法連接到默認實例,例如,到Server的連接失敗,OP的屏幕截圖與SSPI有關
  • 用戶無法將默認實例與完全合格的名稱,例如,Server.domain.com連接失敗(超時)
  • 用戶無法IP地址,而命名實例連接,例如,192.168.1.134連接失敗
  • 其他用戶不能在域(例如,用戶誰VPN的網絡),但使用域憑據能夠成功連接到默認實例和IP地址

所以試圖找出爲什麼這個單一用戶無法連接很多頭痛的問題後,這裏的步驟我們採取修復的情況:

  1. 查看SPN列表中的服務器使用
    setspn -l Server
    a。在我們的示例中,它表示Server.domain.com
  2. 向位於C:\Windows\System32\drivers\etc\hosts的hosts文件添加一個條目(以管理員身份運行記事本以更改此文件)。我們添加的條目是
    Server.domain.com Server

在此之後,我們能夠成功地通過SSMS連接到默認實例。

0

我遇到了一個新的:SQL 2012託管在Server 2012. 被授權爲SQL AlwaysOn創建一個集羣。
集羣創建人人都得到了SSPI消息。

要解決這個問題跑以下命令:

setspn -D MSSQLSvc/SERVER_FQNName:1433 DomainNamerunningSQLService

DomainNamerunningSQLService ==我爲SQL 設置的域帳戶,我需要一個域管理員運行命令。集羣中只有一臺服務器存在問題。

然後重新啓動SQL。令我驚訝的是我能夠連接。

0

我正嘗試從Visual Studio 2015控制檯應用程序的筆記本電腦連接到運行SQL Server 2015的VM。我前一天晚上運行我的應用程序,並沒有問題。在早上,我嘗試調試應用程序,我得到這個錯誤。我試過ipconfig/flushrelease + renew和一堆其他垃圾,但最後...

重新啓動您的虛擬機並重新啓動客戶端。這爲我修好了。我應該知道,每次重新開始工作。

4

我有一個ASP.NET MVC應用程序正在處理這個問題。

我意識到我最近改變了我的密碼,我可以通過登錄並再次註銷,以解決它。

+0

這是我的問題,密碼改變了。應用程序池。 –

7

我花了大約幾個小時,同樣的問題。 原來,那"Integrated Security=true"引起了這個問題。

嘗試從連接字符串中刪除此參數。

0

我在我的sql服務器上有這個問題。我setspn -D mssqlsvc \主機名。域名主機名然後停止並啓動我的SQL服務器服務。

我在想停止並開始我的sql服務就可以了。

0

,同時使用Windows身份驗證登錄,來解決這個問題我已經重新啓動我的服務器一次,然後嘗試登錄我也曾經有過的SQL Server 2014這一問題,它爲我工作。

1

Integrated Security=false

將此標誌webconfig連接字符串爲假。它會工作!

2

我在訪問Web應用程序時遇到了這個問題。這可能是由於我最近更改了Windows密碼。當我已經更新了在那裏我有託管Web應用程序的應用程序池的密碼

這個問題得到了解決。

0

請您在SQL Server Management Studio中的提到的登錄名的權限,使其成爲系統管理員複選框打勾,然後作出Integrated Security=False在config文件。客戶端機器

  1. IPCONFIG/FLUSHDNS

  2. klist的吹掃上

    火警2的命令。

在客戶端計算機上安裝kerbarose配置管理器。

最後,重新啓動客戶機和主要SQL服務器服務。在客戶機上運行應用程序。這工作正確100%。

+0

感謝您的回答 - .config文件在哪裏? –

0

我有同樣的問題,但鎖定和解鎖機器爲我工作。有時,防火牆問題會給出錯誤。

我不確定它是否適合你,只是分享我的經驗。

2

我在使用Windows身份驗證通過SQL Server Management Studio連接時收到此錯誤。我的密碼已過期,但我還沒有更改。一旦更改,我必須註銷並重新登錄,以便機器正在使用我的新憑據。

0

嘗試通過Windows身份驗證時出現同樣的錯誤。聽起來很可笑,但以防萬一它幫助別人:這是因爲我的域帳戶在我登錄(!)時被鎖定了。解鎖該帳戶解決了它。

0

只是另一個潛在的解決方案添加到這個最模糊的錯誤The target principal name is incorrect. Cannot generate SSPI context. (.Net SqlClient Data Provider)的:

驗證查驗SQL Server時所解析的IP是一樣的一個在Configuration Manager。要檢查,請打開SQL Server配置管理器,然後轉到SQL Server網絡配置> MSSQLServer協議> TCP/IP。

確保TCP/IP已啓用,並且在IP地址選項卡中,確保服務器在ping時使用的IP解析爲同一個IP。這爲我解決了這個錯誤。

相關問題