近期網站頻遭攻擊,資料庫多次掛馬。為加強安全性,我們將論壇升級,並將資料庫從 MSSQL 2000 遷移至 MSSQL 2005,採用資料庫還原功能。遷移完成後,卻遇到了經典的「孤立用戶」問題,導致原有應用無法存取資料表。
當資料庫還原到新伺服器時,資料庫內的用戶(如 test)會保留原有的安全識別碼(SID),但新伺服器的登入帳戶卻擁有不同的 SID。即使你建立了相同名稱、相同密碼的登入帳戶,資料庫用戶與伺服器登入之間的 SID 不匹配,導致用戶無法存取原本擁有權限的物件。
sp_change_users_login 儲存程序經驗證,MSSQL 2005 下最有效的修復方法是使用系統儲存程序 sp_change_users_login。它提供三種動作模式:
USE testdb;
GO
EXEC sp_change_users_login 'Report';
EXEC sp_change_users_login 'Update_One', 'test', 'test';
系統將提示已修復一個孤立用戶,SID 完成重新對應。
EXEC sp_change_users_login 'Auto_Fix', 'test', NULL, 'testpassWord';
此命令會自動建立名為 test、密碼為 testpassWord 的伺服器登入,並與資料庫用戶完成映射。
若多個資料庫存在同名用戶的資料表,只需依序切換資料庫上下文(USE dbname),重複執行 Update_One 即可。
資料庫升級遷移後,孤立用戶是常見問題。掌握 sp_change_users_login 的三種模式,能快速恢復應用存取權限,避免業務中斷。建議遷移後立即執行 Report 掃描,批次修復所有孤立帳戶。