Authentication

應用程序中的 Azure SQL 數據庫“使用者登錄失敗”,但在 SSMS 中工作正常

  • November 12, 2021

我想在 Azure SQL 數據庫 V12 上試用包含的數據庫使用者功能,但我遇到了一個對我來說似乎很奇怪的身份驗證問題。

我創建了一個名為Classifier. 我將我的 IP 添加到防火牆規則中,以便我可以從我的工作站上的 SSMS 連接到 Azure db 伺服器。一旦我能夠通過 SSMS 進行連接以進行管理,我嘗試將具有密碼的使用者添加到數據庫,如下所示:

CREATE USER classifier WITH PASSWORD='thepassword'

我還將這個使用者添加到數據寫入者和讀取者角色中:

exec sp_addrolemember 'db_datawriter', 'classifier'
exec sp_addrolemember 'db_datareader', 'classifier'

在此之後,我可以使用來自 SSMS 的這些憑據連接到數據庫:

在此處輸入圖像描述

但這就是事情出錯的地方:我嘗試了幾種不同的連接字元串咒語,但似乎無法在我正在開發的 Web 應用程序中連接。它在 Azure 環境中不起作用,所以我在 localhost 上執行,帶有一個到 Azure 數據庫的連接字元串,它就是無法連接。這是我目前正在使用的連接字元串:

<add name="Classifier" connectionString="Data Source=xxxxxxx.database.secure.windows.net;Initial Catalog=Classifier;User ID=classifier;Password=xxxxxxxxxxxxx;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient"/>

我嘗試為使用者重置密碼(通過 SSMS),然後更新連接字元串;我還通過將此連接字元串中的密碼複製到 SSMS 中的連接對話框中來仔細檢查密碼,以確保我在那裡沒有某種錯字。

我在 Azure db 伺服器中啟用了審核,希望能獲得一些關於它失敗原因的詳細資訊,但我得到的只是:

錯誤 18456,級別 14,狀態 1,伺服器 SQL Azure,第 1 行使用者“分類器”登錄失敗

這就是我卡住的地方。我可以通過文件或部落格找到的大部分內容表明,要做的事情是查看 SQL Server 日誌以查看真正的錯誤狀態,這將更狹義地表明故障的性質,但是因為我’正在與 Azure 打交道,沒有辦法做到這一點(據我所知)。

什麼可能導致應用程序在 SSMS(以及 LinqPad 和 Visual Studio Server Explorer,順便說一句)成功的情況下失敗?

我們發現,對於包含的數據庫/包含的使用者,您必須指定:

GRANT CONNECT TO [YOUR_USER]

否則CONNECT預設情況下似乎被撤銷。一旦我們進行了上述更改,我們就可以訪問數據庫了。

當切換我們的 API 以通過新包含的使用者連接到 Azure 數據庫時,我們必須更改我們的連接字元串以包括:

Persist Security Info=True;

雖然我不明白為什麼需要進行此更改,但我想在此處發布以防將來對其他人有所幫助。

我們最初是從這個問題來嘗試這個的。

引用自:https://dba.stackexchange.com/questions/102605