孤立用户故障排除

系统 1579 0

若要登录到某个 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">。

检测孤立用户

<content xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5"></content>

若要检测孤立用户,请执行下列 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 登录帐户。

解决孤立用户问题

<content xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5"></content>

若要解决孤立用户问题,请执行以下过程:

  1. 以下命令将重新链接 <login_name> 指定的服务器登录帐户与 <database_user> 指定的 AdventureWorks 数据库用户。

    复制代码
                          USE <database_name>;
    GO
    sp_change_users_login @Action='update_one', @UserNamePattern='<database_user>', @LoginName='<login_name>';
    GO
    
                        
    有关详细信息,请参阅 <link tabindex="" keywords="1554b39f-274b-4ef8-898e-9e246b474333">。

  2. 运行上述步骤中的代码后,该用户就可以访问数据库了。该用户随后可以使用 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元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论