[英]SQL login failed because due to untrusted domain
但是,當我嘗試登錄我的 web 應用程序時,.NET 錯誤跟蹤顯示它在登錄時失敗。 在查看數據庫的日志時,我看到了下面的錯誤。 該錯誤似乎表明我在 .NET 應用程序中使用的身份用戶 (domain\account1) 由於此錯誤而無法登錄數據庫。
這一直令人困惑,因為我進行了研究,發現只有當您從外部域連接時才會出現此錯誤,但我不知道為什么它會在我的情況下顯示此錯誤。
我嘗試查看我的 AD,但它看起來已啟動,因為如果不是,我將無法首先使用 domain\account1 將 RDP 插入 VM。
任何幫助我縮小原因的指導都非常受歡迎。
根據我們的談話,可能適用的一個常見原因是 SQL 服務器沒有注冊服務主體名稱。 這是 kerberos 工作所需要的。
為此,您使用setspn
實用程序。
文檔中有很多內容,這里是基礎知識。 服務主體名稱適用於某些特定機器和端口上的某些特定服務(例如,sql 服務器),適用於某些特定域帳戶。 假設您的服務器機器名稱是 MyServer,運行 SQL 服務器實例的帳戶是 MyDomain\SQLAccount,它是默認實例(運行在端口 1433。如果是命名實例,則通過 sql 配置管理器或查看sql 日志的開頭並在下面替換它)
要查看分配給帳戶的 SPN 列表,您可以使用
setspn -l MyDomain\SQLAccount
要為 SQL 服務器服務注冊 SPN,最好注冊 netbios 名稱和完全限定名稱:
setspn -a MSSQLSvc/MyServer:1433 MyDomain\SQLAccount
setspn -a MSSQLSvc/MyServer.mydomain.com:1433 MyDomain\SQLAccount
現在,如果您有多個域控制器,SPN 可能需要一段時間才能在域中復制。 所以你必須等待“足夠長的時間”才能看到它生效。 15分鍾很常見,30分鍾絕對安全。 So after running this, wait a while, then make a new connection to SQL server (using, eg, SSMS and windows auth) and select auth_scheme from sys.dm_exec_connections where session_id = @@spid
again. 如果你看到“kerberos”,它就起作用了。 您還可以從命令行運行klist purge
來清除您的票證,但這通常不是必需的,如果票證尚未復制,它也無濟於事。
這不是您可能會遇到 SSPI 問題的唯一可能原因 - 請參閱 MS 博客了解更多信息。 但它是一個非常常見的。
編輯:
Kerberos 問題通常僅在您擁有“雙跳”憑據時才會發生。 例如,從用戶的機器到 web 服務器,然后從 web 服務器到 SQL 服務器。 這不適用於您的具體情況。 但無論如何我還是會嘗試這個 SPN 設置,因為它只是 SSPI 錯誤的常見來源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.