問題場景
在SQL Server數據庫遷移時,在另外一台服務器上恢復數據庫備份文件之後,需要重新創建之前數據庫上的用戶帳戶。在創建登錄用戶時,需要在User Mapping中給該用戶針對具體的數據庫進行授權,由於恢復出來的數據庫中存在同名的用戶帳戶,創建時會出現"User, group, or role already exists in the current database"的錯誤提示。詳細錯誤信息如下:
TITLE: Microsoft SQL Server Management Studio
------------------------------
Create failed for User 'testuser'. (Microsoft.SqlServer.Smo)
------------------------------
ADDITIONAL INFORMATION:
An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)
------------------------------
User, group, or role 'testuser' already exists in the current database. (Microsoft SQL Server, Error: 15023)
之前的解決方法
在創建用戶帳戶(或者授權)之前,先在對應的數據庫中刪除該同名的用戶帳戶。
最新的解決方法
先創建用戶帳戶,不進行授權,然後通過下面的SQL語句將該用戶帳戶關聯至對應的數據庫用戶。優點是避免了重新授權的操作。
USE {目標數據庫} EXEC sp_change_users_login 'Update_One', '{目標數據庫已存在的用戶名}', '{創建的登錄用戶名}'
方法來源
SQL Server Forums - How to assign a login to an existing user?
查看本欄目