| 對象 | 層級 | 用途 | 標識 |
| 登錄 | 服務器級 | 身份驗證(密碼、Windows 驗證) | SID (Security Identifier) |
| 用戶 | 數據庫級 | 授權、權限控制 | 名稱 + SID 關聯登錄 |
還原備份時,數據庫帶入用戶及其 SID,但新服務器的登錄 SID 可能不同 → SID 不匹配 → 孤立用戶。
二、錯誤 15023 觸發場景
在 SSMS「用戶映射」頁勾選數據庫、選擇角色 → 確定時,系統嘗試創建同名用戶,發現同名用戶已存在但 SID 不同 → 報錯:
三、修復方案 1:sp_change_users_login (SQL Server 2000-2014)
USE Northwind; -- 目標數據庫
GO
EXEC sp_change_users_login 'Update_One', 'test_user', 'test_login';
Update_One:單用戶修復模式。
'test_user':數據庫內孤立用戶名。
'test_login':服務器級登錄名(需預先存在)。
- 效果:將用戶
test_user 的 SID 更新為登錄 test_login 的 SID,關聯恢復正常。
批量修復:EXEC sp_change_users_login 'Auto_Fix', 'user_name', NULL, 'password'; 自動創建登錄並關聯(需密碼)。
四、修復方案 2:ALTER USER ... WITH LOGIN (SQL Server 2012+ 推薦)
USE Northwind;
ALTER USER test_user WITH LOGIN = test_login;
- 語法更標準、可讀性強、無需記住存儲過程參數。
- 支援
WITH LOGIN = [login_name] 顯式指定。
五、預防最佳實踐
- 含登錄備份:
BACKUP LOGINS(需腳本導出 CREATE LOGIN ... WITH SID = ...)或使用 dbatools PowerShell 模組 Copy-DbaLogin 同步登錄。
- AlwaysOn / 鏡像環境:自動同步登錄 SID,無孤立用戶問題。
- 還原後立即檢查:
EXEC sp_change_users_login 'Report'; 列出所有孤立用戶,批量修復。
六、總結
錯誤 15023 本質是 SID 不匹配導致的孤立用戶。舊版用 sp_change_users_login,新版首選 ALTER USER ... WITH LOGIN。建立「登錄隨備份同步」機制,從源頭杜絕遷移、還原、高可用切換時的用戶映射故障。
- 上一篇文章: MySQL 命令行導出數據實戰:mysql 客戶端、重定向、tee、Xcopy 熱備份多種方案
- 下一篇文章: MySQL 常用操作語句速查表:庫/表管理、結構查看、數據導入導出
Copyright ©
程式碼之家 All Rights Reserved