A. 顯示登錄映射的當前用戶的報告
以下示例生成當前數據庫中未鏈接到任何登錄名的用戶及其安全標識符 (SID) 的報告。
EXEC sp_change_users_login 'Report';
B. 將數據庫用戶映射到新的 SQL Server 登錄名
在以下示例中,數據庫用戶與新的 SQL Server 登錄名關聯。數據庫用戶 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
將現有用戶映射到同名的登錄名,以及如何在不存在登錄名 Mary
的情況下,創建密碼為 B3r12-3x$098f6
的 SQL Server 登錄名 Mary
。
USE AdventureWorks;
GO
EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-3x$098f6';
GO
------------結束--------------------
一、孤立帳戶,就是某個數據庫的帳戶只有用戶名而沒有登錄名,這樣的用戶在用戶庫的sysusers系統表中存在,而在master數據庫的syslogins中卻沒有對應的記錄。
孤立帳戶的產生一般是以下兩種:
1.將備份的數據庫在其它機器上還原;
2.重裝系統或SQL SERVER之后只還原了用戶庫
解決方法是使用sp_change_users_login來修復。
sp_change_users_login的用法有三種
用法1:
exec sp_change_users_login 'REPORT'
列出當前數據庫的孤立用戶
用法2:
exec sp_change_users_login 'AUTO_FIX','用戶名'
可以自動將用戶名所對應的同名登錄添加到syslogins中
如果沒有建立testuser的登錄用戶,還可以用
sp_change_users_login 'Auto_Fix', 'testuser', NULL, 'testpass'
用法3:
exec sp_change_users_login 'UPDATE_ONE','用戶名','登錄名'
將用戶名映射為指定的登錄名。
二、對象名'xxxx’無效的問題
這里可能會有人遇到對象名 ‘xxxx’無效的問題。系統表卻不會產生這個問題,而用戶表還要加上用戶名,然后是表明才能訪問,比如select * from author,會說對象名 author 無效,而用select * from test.author就可以訪問,這個是用戶首選身份的問題。
解決很簡單,就是察看test登錄用戶是否具有dba的權限或者系統管理的權限,有的話去掉就行了。
因為如果用戶有dba身份,那么它登陸后的默認表空間是dbo的系統表空間,所以去掉了之后,就會以正常的test表空間訪問數據表了