跨伺服器還原資料庫後,資料庫使用者失去對應伺服器登入,成為「孤立使用者」。症狀:SSMS 使用者屬性顯示「名稱」有值但「登入名」為空,無法登入、無法刪除。
USE RestoredDB;
EXEC sp_change_users_login 'Report';
-- 列出所有孤立使用者 (UserName 與 SID 不符)
CREATE LOGIN [LoginName] WITH PASSWORD = 'Str0ngP@ss!';USE RestoredDB; EXEC sp_change_users_login 'Update_One', 'UserName', 'LoginName';EXEC sp_change_users_login 'Report'; 應無該使用者。USE RestoredDB;
DECLARE @User SYSNAME;
DECLARE cur CURSOR FOR
SELECT UserName FROM #OrphanedUsers; -- 由 Report 產生暫存表
OPEN cur;
FETCH NEXT FROM cur INTO @User;
WHILE @@FETCH_STATUS = 0 BEGIN
-- 嘗試自動對應同名登入,若無則建立隨機密碼登入
EXEC sp_change_users_login 'Auto_Fix', @User, NULL, 'AutoGenPwd_'+@User;
FETCH NEXT FROM cur INTO @User;
END
CLOSE cur; DEALLOCATE cur;
警告:Auto_Fix 依名稱匹配,若同名登入實為不同人會導致權限錯置,**生產環境建議逐一 Update_One**。
-- 還原後 dbo 可能對應舊 SID,導致無法授權
EXEC sp_changedbowner 'NewLoginName'; -- 重新指定資料庫擁有者
CREATE LOGIN ... WITH SID = 0x... 保持 SID 一致。CREATE USER ... WITH PASSWORD = ... 無需伺服器登入,隨資料庫移動零修復。孤立使用者是跨伺服器還原的標準副作用。掌握 sp_change_users_login 'Report'/'Update_One' 標準修復流程,並預先規劃 SID 一致或採用 Contained User,可將移轉風險降至最低。