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

解決 SQL Server 孤立使用者與物件名稱無效的兩大經典問題

     編輯:關於SqlServer

資料庫遷移、還原備份後常遇到兩個棘手問題:孤立使用者導致無法存取原有物件、物件名稱無效需加上擁有者前綴。本文提供兩套標準解決方案。

問題一:孤立使用者

情境:還原資料庫後,原資料庫使用者 (如 test) 與伺服器登入帳戶的 SID 不符,導致即使建立同名登入也無法存取該使用者擁有的物件。

方法 1:變更物件擁有者 (不建議大量物件)

使用 sp_changeobjectowner 將物件擁有者改為 dbo:

EXEC sp_changeobjectowner 'authors', 'dbo';

缺點:物件多時需逐一修改,維護成本高。

方法 2:對應登入與資料庫使用者 (推薦)

使用 sp_change_users_login 修復 SID 映射:

-- 查看孤立使用者
EXEC sp_change_users_login 'report';

-- 已有同名登入,直接對應
EXEC sp_change_users_login 'update_one', 'test', 'test';

-- 無同名登入,自動建立登入並對應
EXEC sp_change_users_login 'Auto_Fix', 'test', NULL, 'testpassword';

此法直接修正系統表中 SID 映射,秒級解決,適用於多資料庫同名使用者批次處理。

問題二:物件名稱無效 (需加擁有者前綴)

現象:SELECT * FROM author 報錯,必須寫 SELECT * FROM test.author。原因:登入使用者具有 sysadmin 或 db_owner 固定伺服器/資料庫角色,預設結構描述為 dbo,導致未加前綴時搜尋 dbo.author 找不到。

解決:移除該登入的 sysadmin / db_owner 權限,或明確指定預設結構描述為 test。登入後即以該使用者結構描述為預設,無需加前綴。

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