sp_change_users_login (Transact-SQL)
适用范围: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)。 必须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不能dbo
,guest
也不能是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 代码示例使用 AdventureWorks2022
或 AdventureWorksDW2022
示例数据库,可从 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