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

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