孤立用户故障排除

若要登录到 Microsoft SQL Server 实例,主体必须具有有效的 SQL Server 登录名。在身份验证过程中会使用此登录名,以验证是否允许主体连接到该 SQL Server 实例。服务器实例中的 SQL Server 登录名可以在 sys.server_principals 目录视图和 sys.syslogins 兼容性视图中看到。

SQL Server 登录名使用映射到 SQL Server 登录名的数据库用户访问个别数据库。此规则有两种例外情况:

  • guest 帐户。
    这个帐户在数据库中启用后,能够使未映射到数据库用户的 SQL Server 登录名作为 Guest 用户进入数据库。
  • Microsoft Windows 组成员身份。
    如果 Windows 用户是 Windows 组的一个成员,并且此工作组也是数据库中的一个用户,则由 Windows 用户创建的 SQL Server 登录名可以进入数据库。

有关将 SQL Server 登录名映射到数据库用户的信息将存储在数据库中。其中包括数据库用户的名称和相应 SQL Server 登录名的 SID。该数据库用户的权限用于在数据库中进行授权。

在服务器实例中未定义或错误定义了其相应 SQL Server 登录名的数据库用户无法登录到实例。这样的用户被称为此服务器实例上的数据库的“孤立用户”**。如果删除了相应的 SQL Server 登录名,则数据库用户可能变为孤立用户。另外,当数据库还原或附加到 SQL Server 的其他实例之后,数据库用户也可能变为孤立用户。如果未在新服务器实例中提供数据库用户映射到的 SID,则该用户可能变为孤立用户。

ms175475.note(zh-cn,SQL.90).gif注意:
除非在缺少相应数据库用户的数据库中启用了 guest,否则,SQL Server 登录名无法访问该数据库。有关创建数据库用户帐户的信息,请参阅 CREATE USER (Transact-SQL)

检测孤立用户

若要检测孤立用户,请执行下列 Transact-SQL 语句:

USE <database_name>;
GO; 
sp_change_users_login @Action='Report';
GO;

输出中列出了当前数据库中未链接到任何 SQL Server 登录名的用户以及相应的安全标识符 (SID)。有关详细信息,请参阅 sp_change_users_login (Transact-SQL)

ms175475.note(zh-cn,SQL.90).gif注意:
sp_change_users_login 不能与通过 Windows 创建的 SQL Server 登录名一起使用。

解决孤立用户问题

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

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

    USE <database_name>;
    GO
    sp_change_users_login @Action='update_one', @UserNamePattern='<database_user>', @LoginName='<login_name>';
    GO
    

    有关详细信息,请参阅 sp_change_users_login (Transact-SQL)

  2. 运行上述步骤中的代码后,该用户就可以访问数据库了。该用户随后可以使用 sp_password 存储过程来更改 <login_name> 登录帐户的密码,如下所示:

    USE master 
    GO
    sp_password @old=NULL, @new='password', @loginame='<login_name>';
    GO;
    
    ms175475.security(zh-cn,SQL.90).gif安全说明:
    只有具有 ALTER ANY LOGIN 权限的登录帐户才能更改其他用户的登录密码。但是,只有 sysadmin 角色的成员才能修改 sysadmin 角色成员的密码。
    ms175475.note(zh-cn,SQL.90).gif注意:
    sp_password 不能用于 Microsoft Windows 帐户。通过 Windows 网络帐户连接到 SQL Server 实例的用户是由 Windows 进行身份验证的,因此其密码只能在 Windows 中更改。

    有关详细信息,请参阅 sp_password (Transact-SQL)

请参阅

其他资源

CREATE USER (Transact-SQL)
CREATE LOGIN (Transact-SQL)
sp_change_users_login (Transact-SQL)
sp_addlogin (Transact-SQL)
sp_grantlogin (Transact-SQL)
sp_password (Transact-SQL)
sys.sysusers (Transact-SQL)
sys.syslogins (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助