首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 孤立用戶修復實戰:資料庫還原後權限失效的根因與解決

     編輯:關於SqlServer

問題背景

網站遭攻擊導致資料庫掛馬,升級論壇並將資料庫從 MSSQL 2000 遷移至 2005(使用還原功能)。遷移後,原有資料庫用戶(如 test)變成「孤立用戶」:即使在新伺服器建立同名、同密碼的登入帳號,仍無法存取原屬於該用戶的資料表。

根因:SID 不匹配

資料庫用戶與伺服器登入的關聯靠安全識別碼(SID)而非名稱。還原資料庫時,資料庫內用戶保留舊 SID;新建登入生成新 SID。雙方 SID 不一致,權限鏈路中斷。

驗證有效的解決方案:sp_change_users_login

1. 掃描孤立用戶

USE testdb;
EXEC sp_change_users_login 'Report';

2. 映射現有登入(登入已存在)

EXEC sp_change_users_login 'Update_One', 'test', 'test';
-- 訊息: 已修復 1 個孤立用戶。

3. 自動建立登入並映射(登入不存在)

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';
-- 以此類推

進階:遷移腳本化建議

  1. 遷移前導出所有登入腳本(含 SID):sp_help_revlogin
  2. 目標伺服器先執行登入建立腳本,保證 SID 一致
  3. 再還原資料庫,即可避免孤立用戶問題

總結

掌握 Report 掃描、Update_One 映射、Auto_Fix 自動建立三步驟,可快速解決升級遷移後的權限斷鏈問題。生產環境建議採用 SID 保持遷移策略,從源頭杜絕孤立用戶。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved