網站遭攻擊導致資料庫掛馬,升級論壇並將資料庫從 MSSQL 2000 遷移至 2005(使用還原功能)。遷移後,原有資料庫用戶(如 test)變成「孤立用戶」:即使在新伺服器建立同名、同密碼的登入帳號,仍無法存取原屬於該用戶的資料表。
資料庫用戶與伺服器登入的關聯靠安全識別碼(SID)而非名稱。還原資料庫時,資料庫內用戶保留舊 SID;新建登入生成新 SID。雙方 SID 不一致,權限鏈路中斷。
sp_change_users_loginUSE testdb;
EXEC sp_change_users_login 'Report';
EXEC sp_change_users_login 'Update_One', 'test', 'test';
-- 訊息: 已修復 1 個孤立用戶。
EXEC sp_change_users_login 'Auto_Fix', 'test', NULL, 'StrongPassw0rd!';
-- 自動建立登入 test,密碼 StrongPassw0rd!,並完成映射
若多個資料庫存在同名孤立用戶,依序執行:
USE db1; EXEC sp_change_users_login 'Update_One', 'test', 'test';
USE db2; EXEC sp_change_users_login 'Update_One', 'test', 'test';
-- 以此類推
sp_help_revlogin掌握 Report 掃描、Update_One 映射、Auto_Fix 自動建立三步驟,可快速解決升級遷移後的權限斷鏈問題。生產環境建議採用 SID 保持遷移策略,從源頭杜絕孤立用戶。