适用范围:SQL Server
将现有数据库用户映射到 SQL Server 登录名。
重要
在 SQL Server的未来版本中将删除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 请改用 ALTER USER 。
语法
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)。
必须指定@UserNamePattern、@LoginName和NULL。若要使用系统表将报表选项替换为查询,请将其中的 sys.server_principals 条目与其中的 sys.database_principals条目进行比较。 |
Update_One |
将当前数据库中的指定 @UserNamePattern 链接到现有的 SQL Server @LoginName。
必须指定@UserNamePattern 和 @LoginName 。
必须NULL或未指定@Password。 |
[ @UserNamePattern = ] N'UserNamePattern'
当前数据库中用户的名称。 @UserNamePattern为 sysname.
[ @LoginName = ] N'LoginName'
SQL Server 登录名的名称。
@LoginName为 sysname,默认值为 NULL.
[ @Password = ] N'密码'
分配给通过指定 Auto_Fix创建的新 SQL Server 登录名的密码。
@Password是 sysname。 如果已存在匹配的登录名,则会映射用户和登录名,并 忽略@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不能,而@UserNamePatternsa
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该选项。
示例
本文中的代码示例使用 AdventureWorks2025 或 AdventureWorksDW2025 示例数据库,可以从 Microsoft SQL Server 示例和社区项目 主页下载该数据库。
答: 显示当前用户到登录映射的报告
下例生成当前数据库中的用户及其安全标识符 (SID) 的报告。
EXECUTE sp_change_users_login 'Report';
B. 将数据库用户映射到新的 SQL Server 登录名
在以下示例中,数据库用户与新的 SQL Server 登录名相关联。 数据库用户 MB-Sales 首先映射到另一个登录名,然后重新映射到登录名 MaryB。 替换为 <password> 强密码。
--Create the new login.
CREATE LOGIN MaryB WITH PASSWORD = '<password>';
GO
--Map database user MB-Sales to login MaryB.
USE AdventureWorks2022;
GO
EXECUTE sp_change_users_login 'Update_One', 'MB-Sales', 'MaryB';
GO
°C 根据需要自动将用户映射到登录名并创建新的登录名
以下示例演示如何用于Auto_Fix将现有用户映射到同名的登录名,或创建具有密码的 SQL Server 登录名(如果该登录MaryMary名不存在)。 替换为 <password> 强密码。
USE AdventureWorks2022;
GO
EXECUTE sp_change_users_login 'Auto_Fix', 'Mary', NULL, '<password>';
GO