使用SSMS建立Login的使用者對應時,遇到"使用者群組或角色在[資料庫名稱]的目前資料庫中已經存在"的問題排除
當您將備份的資料庫還原到不同台的SQL Server時,嘗試利用SSMS為登入(login)建立對應的資料庫使用者(user)時,可能遇到使用者群組或角色在[資料庫名稱]的目前資料庫中已經存在的錯誤訊息,本文將介紹可能的解決方案。
假設您想將名稱為NWUser的登入對應至Northwind中名稱為NorthwindUser的使用者,利用SSMS的設定畫面如下:
當您按下確定後可能收到下列的錯誤訊息:
使用者、群組或角色 '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 Northwind2: GO3:
4: ALTER USER NorthwindUser WITH LOGIN = NWUser5: GO
- 下列程式碼示範使用sp_change_user_login來修改使用者與登入的對應:
EXEC sp_change_users_login 'Update_One','NorthwindUser','NWUser'
【特別注意】未來的SQL SERVER版本將移除sp_change_users_login功能,因此建議使用ALTER USER。