網站運營seo文章大全提供全面的站長運營經驗及seo技術!問題描述:
從別處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 db
go
exec sp_change_users_login 'report'
解決孤立用戶的方法:
解決這種異常只要解決掉孤立用戶,在確定了admini是孤立用戶后,可以執行下面的語句來解決:
use db
go
-- 修復孤立用戶
exec sp_change_users_login 'auto_fix', 'admin', null, '密碼';
-- 這個密碼是指, 如果沒有事先建立admin 這個登錄的話, sql自動創建登錄時, 為該登錄分配的密碼
-- 授予在db 中的相關權限
exec sp_addrolemember 'db_owner', 'admin'