使用SSMS建立Login的使用者對應時,遇到"使用者群組或角色在[資料庫名稱]的目前資料庫中已經存在"的問題排除

使用SSMS建立Login的使用者對應時,遇到"使用者群組或角色在[資料庫名稱]的目前資料庫中已經存在"的問題排除

當您將備份的資料庫還原到不同台的SQL Server時,嘗試利用SSMS為登入(login)建立對應的資料庫使用者(user)時,可能遇到使用者群組或角色在[資料庫名稱]的目前資料庫中已經存在的錯誤訊息,本文將介紹可能的解決方案。

假設您想將名稱為NWUser的登入對應至Northwind中名稱為NorthwindUser的使用者,利用SSMS的設定畫面如下:

image

當您按下確定後可能收到下列的錯誤訊息:

使用者、群組或角色 'NorthwindUser' 在目前的資料庫中已經存在。

會遇到這個錯誤的原因為還原資料庫時,使用者的SID與原本的SID不同,導致SQL SERVER無法建立登入與使用者的對應,且透過SSMS建立使用者對應,其實是執行下列的T-SQL敘述:

   1:  USE [Northwind]
   2:  GO
   3:  CREATE USER [NorthwindUser] FOR LOGIN [NWUser]
   4:  GO

由於Northwind中已經存在NorthwindUser使用者,因此SSMS嘗試執行上述T-SQL來建立相同名稱的使用者因而被拒絕,所以才會收到錯誤訊息。我們可以藉由ALTER USER敘述或sp_change_users_loging預存程序來修改既有使用者與登入的對應,說明如下:

  • 下列程式碼示範使用ALTER USER來修改使用者與登入的對應:
   1:  USE Northwind
   2:  GO
   3:   
   4:  ALTER USER NorthwindUser WITH LOGIN = NWUser
   5:  GO
  • 下列程式碼示範使用sp_change_user_login來修改使用者與登入的對應:

EXEC sp_change_users_login 'Update_One','NorthwindUser','NWUser'

【特別注意】未來的SQL SERVER版本將移除sp_change_users_login功能,因此建議使用ALTER USER。