孤立用戶和對象名無效問題的解決方法
A. 顯示登錄映射的當前用戶的報告
以下示例生成當前數(shù)據(jù)庫中未鏈接到任何登錄名的用戶及其安全標識符 (SID) 的報告。
EXEC sp_change_users_login 'Report';
B. 將數(shù)據(jù)庫用戶映射到新的 SQL Server 登錄名
在以下示例中,數(shù)據(jù)庫用戶與新的 SQL Server 登錄名關(guān)聯(lián)。數(shù)據(jù)庫用戶 MB-Sales
首先映射到另一個登錄名,然后重新映射到登錄名 MaryB
。
--Create the new login.
CREATE LOGIN MaryB WITH PASSWORD = '982734snfdHHkjj3';
GO
--Map database user MB-Sales to login MaryB.
USE AdventureWorks;
GO
EXEC sp_change_users_login 'Update_One', 'MB-Sales', 'MaryB';
GO
C. 自動將用戶映射到登錄名(必要時新建一個登錄名)
以下示例顯示如何使用 Auto_Fix
將現(xiàn)有用戶映射到同名的登錄名,以及如何在不存在登錄名 Mary
的情況下,創(chuàng)建密碼為 B3r12-3x$098f6
的 SQL Server 登錄名 Mary
。
USE AdventureWorks;
GO
EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-3x$098f6';
GO
------------結(jié)束--------------------
一、孤立帳戶,就是某個數(shù)據(jù)庫的帳戶只有用戶名而沒有登錄名,這樣的用戶在用戶庫的sysusers系統(tǒng)表中存在,而在master數(shù)據(jù)庫的syslogins中卻沒有對應(yīng)的記錄。
孤立帳戶的產(chǎn)生一般是以下兩種:
1.將備份的數(shù)據(jù)庫在其它機器上還原;
2.重裝系統(tǒng)或SQL SERVER之后只還原了用戶庫
解決方法是使用sp_change_users_login來修復。
sp_change_users_login的用法有三種
用法1:
exec sp_change_users_login 'REPORT'
列出當前數(shù)據(jù)庫的孤立用戶
用法2:
exec sp_change_users_login 'AUTO_FIX','用戶名'
可以自動將用戶名所對應(yīng)的同名登錄添加到syslogins中
如果沒有建立testuser的登錄用戶,還可以用
sp_change_users_login 'Auto_Fix', 'testuser', NULL, 'testpass'
用法3:
exec sp_change_users_login 'UPDATE_ONE','用戶名','登錄名'
將用戶名映射為指定的登錄名。
二、對象名'xxxx’無效的問題
這里可能會有人遇到對象名 ‘xxxx’無效的問題。系統(tǒng)表卻不會產(chǎn)生這個問題,而用戶表還要加上用戶名,然后是表明才能訪問,比如select * from author,會說對象名 author 無效,而用select * from test.author就可以訪問,這個是用戶首選身份的問題。
解決很簡單,就是察看test登錄用戶是否具有dba的權(quán)限或者系統(tǒng)管理的權(quán)限,有的話去掉就行了。
因為如果用戶有dba身份,那么它登陸后的默認表空間是dbo的系統(tǒng)表空間,所以去掉了之后,就會以正常的test表空間訪問數(shù)據(jù)表了
posted on 2012-07-08 12:13
Ke 閱讀(1140)
評論(0) 編輯 收藏 所屬分類:
sql server