若要登錄到某個 Microsoft SQL Server 實例,主體必須擁有服務器實例所提供的有效登錄帳戶。在身份驗證過程中會使用此登錄帳戶,以驗證是否允許主體連接到該 SQL Server 實例。服務器實例上的登錄帳戶可以在 sys.server_principals 目錄視圖和 sys.syslogins 兼容性視圖中看到。
登錄帳戶將使用數據庫中存在的用于該帳戶的用戶映射來訪問各個數據庫。此規則有兩種例外情況:
-
guest 帳戶。
當在數據庫中啟用此帳戶時,意味著不具有用戶映射的所有登錄帳戶都可以作為 guest 用戶進入數據庫。
-
Microsoft Windows 組成員身份。
對于任何一個數據庫,如果 Windows 登錄帳戶所屬的任何一組也是該數據庫的用戶,那么該登錄帳戶就可以進入該數據庫。
其他所有登錄帳戶均要求登錄帳戶映射到的數據庫定義相應的數據庫用戶帳戶。保存在數據庫中的映射信息包含用戶名以及用戶名映射到的登錄帳戶的 SID。此數據庫用戶帳戶用于驗證在數據庫中的權限。
如果沒有在服務器實例上為某個用戶定義相應的登錄帳戶,或者定義不正確,那么即使數據庫中的用戶和權限不變,此用戶也不能登錄到該服務器實例。這樣的用戶被稱為該服務器實例上的數據庫的“孤立用戶”。如果從服務器實例中刪除某個數據庫用戶相應的登錄帳戶,該用戶就會成為孤立用戶。另外,還原數據庫或將其附加到其他 SQL Server 實例之后,用戶也會成為孤立用戶。之所以會成為孤立用戶,是因為數據庫用戶映射到的登錄帳戶 SID 在新的服務器實例中可能不存在。
如果給定登錄帳戶的用戶不具有數據庫用戶帳戶,該登錄帳戶就無法訪問數據庫(即使其用戶可能能夠連接到服務器實例),除非數據庫包含 guest 用戶帳戶。有關創建數據庫用戶帳戶的信息,請參閱 <link tabindex="" xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" keywords="01de7476-4b25-4d58-85b7-1118fe64aa80">。 |
檢測孤立用戶
若要檢測孤立用戶,請執行下列 Transact-SQL 語句:
USE <database_name>; GO; sp_change_users_login @Action='Report'; GO; |
輸出結果將列出當前數據庫中未鏈接到任何登錄帳戶的用戶以及相應的安全性標識符 (SID)。有關詳細信息,請參閱 <link tabindex="" keywords="1554b39f-274b-4ef8-898e-9e246b474333">。
sp_change_users_login 不能用于 Windows 登錄帳戶。 |
解決孤立用戶問題
若要解決孤立用戶問題,請執行以下過程:
-
以下命令將重新鏈接 <login_name> 指定的服務器登錄帳戶與 <database_user> 指定的
AdventureWorks
數據庫用戶。
復制代碼
USE <database_name>; GO sp_change_users_login @Action='update_one', @UserNamePattern='<database_user>', @LoginName='<login_name>'; GO
-
運行上述步驟中的代碼后,該用戶就可以訪問數據庫了。該用戶隨后可以使用 sp_password 存儲過程來更改 <login_name> 登錄帳戶的密碼,如下所示:
復制代碼
USE master GO sp_password @old=NULL, @new='password', @loginame='<login_name>'; GO;
只有具有 ALTER ANY LOGIN 權限的登錄帳戶才能更改其他用戶的登錄密碼。但是,只有 sysadmin 角色的成員才能修改 sysadmin 角色成員的密碼。 |
sp_password 不能用于 Microsoft Windows 帳戶。通過 Windows 網絡帳戶連接到 SQL Server 實例的用戶是由 Windows 進行身份驗證的,因此其密碼只能在 Windows 中更改。 |
有關詳細信息,請參閱 <link tabindex="" keywords="0ecbec81-e637-44a9-a61e-11bf060ef084">。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
