sp_change_users_login (Transact-SQL)

适用范围:SQL Server

将现有数据库用户映射到 SQL Server 登录名。

重要

在 SQL Server的未来版本中将删除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 请改用 ALTER USER

Transact-SQL 语法约定

语法

sp_change_users_login
    [ @Action = ] 'Action'
    [ , [ @UserNamePattern = ] N'UserNamePattern' ]
    [ , [ @LoginName = ] N'LoginName' ]
    [ , [ @Password = ] N'Password' ]
[ ; ]

参数

[ @Action = ] '操作'

描述要执行的存储过程的操作。 @Action是 varchar(10),没有默认值,并且可以具有以下值之一。

说明
Auto_Fix 将当前数据库中系统目录视图中的用户条目 sys.database_principals 链接到同名的 SQL Server 登录名。 如果同名的登录名不存在,则会创建一个登录名。 检查语句的结果 Auto_Fix ,确认确实进行了正确的链接。 避免在安全敏感的情况下使用 Auto_Fix

使用 Auto_Fix时,如果登录名尚不存在,则必须指定 @UserNamePattern@Password ,否则必须指定 @UserNamePattern忽略@Password@LoginName必须是 NULL@UserNamePattern必须是当前数据库中的有效用户。 登录名不能有另一个用户映射到该登录名。
Report 列出当前数据库中未链接到任何登录名的用户和相应的安全标识符(SID)。 必须NULL指定@UserNamePattern、@LoginName@Password

若要使用系统表将报表选项替换为查询,请将其中的 sys.server_prinicpals 条目与其中的 sys.database_principals条目进行比较。
Update_One 将当前数据库中的指定 @UserNamePattern 链接到现有的 SQL Server @LoginName必须指定@UserNamePattern@LoginName必须NULL或未指定@Password。

[ @UserNamePattern = ] N'UserNamePattern'

当前数据库中用户的名称。 @UserNamePattern为 sysname,默认值为 NULL.

[ @LoginName = ] N'LoginName'

SQL Server 登录名的名称。 @LoginName为 sysname,默认值为 NULL.

[ @Password = ] N'密码'

分配给通过指定 Auto_Fix创建的新 SQL Server 登录名的密码。 @Password是 sysname,不能NULL。 如果已存在匹配的登录名,则会映射用户和登录名,并 忽略@Password 。 如果匹配的登录名不存在,sp_change_users_login请创建新的 SQL Server 登录名,并将@Password分配为新登录名的密码。

重要

始终使用 强密码

返回代码值

0(成功)或 1(失败)。

结果集

列名称 数据类型 描述
UserName sysname 数据库用户名。
UserSID varbinary(85) 用户的安全标识符。

注解

用于 sp_change_users_login 将当前数据库中的数据库用户与 SQL Server 登录名链接。 如果用户的登录名发生更改,则用于 sp_change_users_login 将用户链接到新登录名,而不会丢失用户权限。 新的@LoginName不能,而@UserNamePattern不能dboguest也不能是INFORMATION_SCHEMA用户。sa

sp_change_users_login 不能用于将数据库用户映射到 Windows 级主体、证书或非对称密钥。

sp_change_users_login 不能与从 Windows 主体创建的 SQL Server 登录名或通过使用用户 CREATE USER WITHOUT LOGIN创建的 SQL Server 登录名一起使用。

sp_change_users_login 无法在用户定义的事务中执行。

权限

要求具有 db_owner 固定数据库角色中的成员资格。 只有 sysadmin 固定服务器角色的成员才能指定Auto_Fix该选项。

示例

本文中的 Transact-SQL 代码示例使用 AdventureWorks2022AdventureWorksDW2022 示例数据库,可从 Microsoft SQL Server 示例和社区项目主页下载它。

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 AdventureWorks2022;
GO
EXEC sp_change_users_login 'Update_One', 'MB-Sales', 'MaryB';
GO

°C 根据需要自动将用户映射到登录名并创建新的登录名

以下示例演示如何用于 Auto_Fix 将现有用户映射到同名的登录名,或创建 SQL Server 登录名(如果该登录 Mary B3r12-3x$098f6 Mary 名不存在)。<

USE AdventureWorks2022;
GO
EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-3x$098f6';
GO