簡體   English   中英

SQL 登錄失敗,因為域不受信任

[英]SQL login failed because due to untrusted domain

  • 我有一個 VM,其中包含 SQL 服務器和 IIS 服務器。
  • 我的 IIS 服務器有一個運行 .NET web 應用程序的應用程序池。
  • 此應用程序池標識為 domain\account1
  • 我的應用程序 web.config 連接字符串具有“Trusted_Connection=True”和 Data Source=NAME\INSTANCE01
  • 我的 SQL 服務器啟用了“SQL Server 和 Window 身份驗證模式”。 帳戶 domain\account1 被添加到數據庫安全登錄中。
  • 我可以使用 domain\account1 RDP 進入這個 VM,我可以使用 Window 身份驗證並連接到 NAME\INSTANCE01 通過 SMS 連接到數據庫
  • 我確認我們的 AD 和 DC 上只有一個域。

但是,當我嘗試登錄我的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM