Sql-Server

SQL Server 錯誤 - “無法作為數據庫主體執行,因為主體namen一種米和name“ 不存在”

  • April 1, 2022

我一直在尋找這個問題的答案,但到目前為止我所嘗試的都沒有奏效。所以發生的事情是我的 DBA 為我創建了一個 SQL Server 數據庫的副本。我在一個項目中有幾個 SQL Server Reporting Services (SSRS) 報告(在我的 Visual Studio 解決方案中),它們都必須通過預定義的憑據連接到新數據庫。

有問題的憑據由使用者名和密碼組成。如果數據庫名稱是“DbName”並且有問題的使用者名是“dbUserName”,我得到的錯誤是:

無法打開登錄請求的數據庫“DbName”。登錄失敗。使用者“dbUserName”登錄失敗。

在 SQL Server Management Studio (SSMS) 中查看數據庫“DbName”的屬性時,在“權限”菜單下,我確實看到了“dbUserName”作為使用者的條目。我看到它已被授予連接權限,但是當我點擊“有效”選項卡時,出現以下錯誤:

無法作為數據庫主體執行,因為主體“dbUserName”不存在,無法模擬此類主體,或者您沒有權限。

此外,還有一條可能有用的資訊。如果在 SSMS 中,我進入數據庫“DbName”的Security文件夾,然後展開“使用者” ,我會在那裡看到使用者“dbUserName”。查看它的屬性會發現它的使用者類型是“沒有登錄的 SQL 使用者”,而在不同的數據庫(基本上是“DbName”的測試副本)中,使用者類型是“登錄的 SQL 使用者”。

知道是什麼導致了有問題的錯誤嗎?

當您看到“沒有登錄的 SQL 使用者”作為“使用者類型”時,這表明數據庫包含具有該名稱的使用者,但SQL Server 實例沒有連結到該使用者的登錄。

您可以使用 sp_change_users_login 語句來糾正這一點,如@rvsc48 的答案中所述,或者您可以使用以下ALTER USER語法:

ALTER USER <db_account_name> WITH LOGIN = <instance_account_name>;

如果帳戶在實例級別不存在,您可以使用以下CREATE LOGIN語法創建它,如下所示:

CREATE LOGIN <instance_account_name> 
WITH PASSWORD = 'P@ssw0rd';

創建登錄後,執行ALTER USER上面的命令將兩者連結在一起。

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