資料庫備份還原到不同伺服器時,常發生「孤立用戶」:資料庫內有用戶,但 master 資料庫無對應登入帳號,導致無法登入。本文詳細說明成因、偵測與修復步驟。
master..sysxlogins,含 SID。db..sysusers,同樣含 SID。master 無對應登入 SID,即產生孤立用戶。-- 1. 原伺服器建立登入與用戶
USE master; sp_addlogin 'test', 'password', 'Northwind';
USE Northwind; sp_grantdbaccess 'test';
-- 2. 備份還原至新伺服器
BACKUP DATABASE Northwind TO DISK='C:\backup\Northwind.bak';
RESTORE DATABASE Northwind FROM DISK='C:\backup\Northwind.bak';
-- 3. 偵測孤立用戶
USE Northwind; EXEC sp_change_users_login 'report';
-- 輸出列出 sysusers 與 sysxlogins SID 不匹配的用戶
USE Northwind;
EXEC sp_change_users_login 'update_one', 'test', 'test';
-- 將資料庫用戶 test 連結至登入帳號 test
EXEC sp_change_users_login 'auto_fix', 'test';
-- 依名稱自動匹配,若名稱衝突可能導致權限錯配,不建議生產環境使用
guest 用戶,無對應登入的連線會映射為 guest。