如何解決引用對象時,必須加所有者(owner)的問題
來源:互聯網
上載者:User
對象|解決|問題 問題描述:從別處copy來一個資料庫DB,附加後,對象的所有者不是Admini,每次查詢時必需寫select * from Admini.***才能查到。有什麼方法不用前面的Admini嗎(在不修改所有者的前提下)?註:已經在“安全性-登陸”下面也建立了一個Admini使用者,預設資料庫設定為DB,許可權足夠,但在查詢分析器下用Admini登陸,查詢時還是要寫Admini首碼,否則就提示對象名無效
問題解決方案:
如果是用的是sql 2000的話,用某個使用者登入, 不指定所有者的話, 訪問對象的時候, 預設的所有者就是當前登入使用者如果是2005的話, 在資料的安全性--使用者--右鍵你的使用者admin--屬性, 看看預設構架是什麼, 這個預設架構決定當你訪問對象時, 不指定所有者的話, 使用那個所有者(sql 2005中, owner變成構架了)
會導致與上面的說法不匹配的異常情況:
如果在資料庫DB中,Admini是孤立使用者的話,則情況會與上面描述的有出入(附加或者恢複資料庫很容易出現孤立使用者),即引用對象時必須指定所有者。孤立使用者的表現是:只能建立Admini登入, 並通過伺服器角色給其分配對DB的許可權,或者是在DB中建立名稱不是Admini的使用者與登入關聯。要查詢DB中的孤立使用者情況,執行下面的語句:USE DBGO EXEC sp_change_users_login 'Report'
解決孤立使用者的方法:
解決這種異常只要解決掉孤立使用者,在確定了Admini是孤立使用者後,可以執行下面的語句來解決:USE DBGO -- 修複孤立使用者EXEC sp_change_users_login 'Auto_Fix', 'Admin', NULL, '密碼'; -- 這個密碼是指, 如果沒有事先建立admin 這個登入的話, sql自動建立登入時, 為該登入分配的密碼 -- 授予在DB 中的相關許可權EXEC sp_addrolemember 'db_owner', 'Admin'