資料庫遷移、還原備份後常遇到兩個棘手問題:孤立使用者導致無法存取原有物件、物件名稱無效需加上擁有者前綴。本文提供兩套標準解決方案。
情境:還原資料庫後,原資料庫使用者 (如 test) 與伺服器登入帳戶的 SID 不符,導致即使建立同名登入也無法存取該使用者擁有的物件。
使用 sp_changeobjectowner 將物件擁有者改為 dbo:
EXEC sp_changeobjectowner 'authors', 'dbo';
缺點:物件多時需逐一修改,維護成本高。
使用 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。登入後即以該使用者結構描述為預設,無需加前綴。