Sql-Server

如何將 SQL Server 登錄名映射到只讀數據庫中已存在的使用者?

  • May 28, 2014

我們的一位數據庫使用者抱怨說,他們無法從這個特定實例中的一個數據庫中進行選擇,而他們在同一個實例中訪問其他數據庫時沒有問題。他們有訪問問題的那一項顯示為“待機/只讀”。其他只是正常的。

因此,我檢查了給定主體的 Security -> Logins 並查看了主體的屬性,以查看是否有任何使用者映射到此登錄的只讀數據庫。該特定數據庫沒有這樣的映射,而其他數據庫有映射並且都具有“db_datareader”角色成員資格。最初,我也想為這個數據庫添加一個使用者映射;但是,它失敗並顯示以下消息:

“更新數據庫 X 失敗,因為數據庫是只讀的”

然後,我檢查了只讀數據庫,發現其中存在一個與出現此問題的帳戶同名的使用者。它還具有“db_datareader”角色成員資格。所以,我想我只需要將兩者聯繫起來;但是,我不知道如何。請幫我!謝謝。

由於數據庫的狀態是 Standby,我假設這個數據庫是一個 Log Shipping 輔助數據庫。如果是這種情況,則根本無法在輔助節點上寫入數據庫(使其可寫會破壞日誌傳送)。

此外,由於您說其他數據庫(可能不是只讀的)具有正確的映射,我假設您使用的是 SQL 登錄。如果是這種情況,您所要做的就是在輔助伺服器上重新創建登錄名,CREATE LOGIN ... WITH SID以匹配主伺服器的 SID(查看sys.server_principals主伺服器以找到它)。

另一方面,如果您使用 Active Directory 進行登錄,則必須將使用者主體添加到數據庫,以便在日誌備份中遇到輔助數據庫時,無需進行任何重新映射(注意:視情況而定,說起來容易做起來難!)。

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