sp_change_users_login (Transact-SQL)

适用于:SQL Server

将现有数据库用户地图到 SQL Server 登录名。

重要

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

Transact-SQL 语法约定

语法

  
sp_change_users_login [ @Action = ] 'action'   
    [ , [ @UserNamePattern = ] 'user' ]   
    [ , [ @LoginName = ] 'login' ]   
    [ , [ @Password = ] 'password' ]  
[;]  

参数

[ @Action= ] 'action'
描述过程要执行的操作。 操作varchar(10)。 操作 可以具有以下值之一。

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

使用Auto_Fix时,如果登录名尚不存在,则必须指定用户密码,否则必须指定用户,但密码将被忽略。 登录 名必须为 NULL。 用户 必须是当前数据库中的有效用户。 不能将另一个用户映射到该登录名。
报告 列出当前数据库中未链接到任何登录名的用户以及相应的安全标识符 (SID)。 用户登录名和 密码 必须为 NULL 或未指定。

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

[ @UserNamePattern= ] 'user'
当前数据库中的用户名。 用户sysname,默认值为 NULL。

[ @LoginName= ] 'login'
SQL Server 登录名的名称。 login 的数据类型为 sysname,默认值为 NULL。

[ @Password= ] 'password'
为指定Auto_Fix创建的新 SQL Server 登录名分配的密码。 如果已存在匹配的登录名,则会映射用户和登录名,并 忽略密码 。 如果不存在匹配的登录名,sp_change_users_login创建新的 SQL Server 登录名,并将密码分配为新登录名的密码。 passwordsysname,不得为 NULL。

重要

始终使用 强密码!

返回代码值

0(成功)或 1(失败)

结果集

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

注解

使用sp_change_users_login将当前数据库中的数据库用户与 SQL Server 登录名链接。 如果用户登录名已更改,则使用 sp_change_users_login 将用户链接到新的登录,而不会丢失用户的权限。 新 登录 名不能为 sa, 用户 不能是 dbo、来宾或INFORMATION_SCHEMA用户。

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

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

不能在用户定义的事务中执行 sp_change_users_login。

权限

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

示例

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将现有用户映射到同名的登录名,或者创建具有密码B3r12-3x$098f6的 SQL Server 登录名(如果该登录MaryMary名不存在)。

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

另请参阅

安全存储过程 (Transact-SQL)
CREATE LOGIN (Transact-SQL)
sp_adduser (Transact-SQL)
sp_helplogins (Transact-SQL)
系统存储过程 (Transact-SQL)
sys.database_principals (Transact-SQL)