首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

解決 SQL Server 遷移後「User, group, or role already exists」錯誤:sp_change_users_login 最佳實務

     編輯:關於SqlServer

問題場景

資料庫遷移至新伺服器後,還原備份檔,需重建登入並對應資料庫使用者。在 SSMS 建立登入時勾選 User Mapping,因資料庫內已存在同名使用者,報錯:

User, group, or role 'testuser' already exists in the current database. (Error 15023)

舊作法(不推薦)

先刪除資料庫內同名使用者,再建立登入並授權。缺點:需重新設定權限、角色成員資格、預設結構描述等。

最佳作法:sp_change_users_login 'Update_One'

  1. 建立登入(不勾選 User Mapping)。
  2. 在目標資料庫執行:
USE TargetDB;
GO
EXEC sp_change_users_login 'Update_One', 'db_username', 'login_name';
GO
  • db_username:資料庫內現有的使用者名稱。
  • login_name:剛建立的伺服器登入名稱。

優點

  • 保留資料庫使用者原有的權限、角色、結構描述擁有權、預設結構描述等設定。
  • 避免 Drop User 導致關聯物件(如結構描述擁有權)需額外處理。
  • 支援批次腳本自動化遷移流程。

補充:自動修正所有孤立使用者

USE TargetDB;
GO
EXEC sp_change_users_login 'Report'; -- 列出所有孤立使用者
-- 或使用 'Auto_Fix' 自動建立登入並對應(需密碼)
EXEC sp_change_users_login 'Auto_Fix', 'username', NULL, 'StrongPassword';

參考來源:SQL Server Forums - How to assign a login to an existing user?

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved