首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server 孤立用戶問題成因與解決方案:sp_change_users_login 實戰

     編輯:MySQL 資料庫相關知識

資料庫備份還原到不同伺服器時,常發生「孤立用戶」:資料庫內有用戶,但 master 資料庫無對應登入帳號,導致無法登入。本文詳細說明成因、偵測與修復步驟。

核心概念區分

  • 登入帳號:伺服器層級,驗證身分,儲於 master..sysxlogins,含 SID。
  • 資料庫用戶:資料庫層級,授權存取物件,儲於 db..sysusers,同樣含 SID。
  • 兩者透過 SID 關聯。還原資料庫時,用戶 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。
  • 修復後用戶即可正常登入存取資料庫。
  • Microsoft 確認此為已知問題,文檔編號 274188。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved