sp_addlogin (Transact-SQL)
适用范围:SQL Server
创建一个新的 SQL Server 登录名,允许用户使用 SQL Server 身份验证连接到 SQL Server 实例。
重要
在 SQL Server的未来版本中将删除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 请改用 CREATE LOGIN 。
重要
请尽可能使用 Windows 身份验证。
语法
sp_addlogin
[ @loginame = ] N'loginame'
[ , [ @passwd = ] N'passwd' ]
[ , [ @defdb = ] N'defdb' ]
[ , [ @deflanguage = ] N'deflanguage' ]
[ , [ @sid = ] sid ]
[ , [ @encryptopt = ] 'encryptopt' ]
[ ; ]
参数
[ @loginame = ] N'loginame'
登录名。 @loginame为 sysname,无默认值。
[ @passwd = ] N'passwd'
登录密码。 @passwd为 sysname,默认值为 NULL
.
重要
不要使用空密码。 请使用强密码。
[ @defdb = ] N'defdb'
登录名的默认数据库(登录后首次连接到该登录名的数据库)。 @defdb为 sysname,默认值为 master
.
[ @deflanguage = ] N'deflanguage'
登录名的默认语言。 @deflanguage为 sysname,默认值为 NULL
. 如果未 指定@deflanguage ,新登录名的默认 @deflanguage 将设置为服务器的当前默认语言。
[ @sid = ] sid
安全标识号(SID)。 @sid 为 varbinary(16),默认值为 NULL
. 如果@sidNULL
,系统会为新登录名生成 SID。 尽管使用了 varbinary 数据类型,但长度 NULL
不能完全为 16 字节的值,并且尚不存在。 指定@sid非常有用,例如,编写脚本或将 SQL Server 登录名从一台服务器移到另一台服务器,并且希望登录名在不同的服务器上具有相同的 SID。
[ @encryptopt = ] 'encryptopt'
指定是以明文形式,还是以明文密码的哈希运算结果来传递密码。 不会进行加密。 在本讨论中使用“加密”一词是为了向后兼容。 如果传入明文密码,则会对其进行哈希处理。 哈希值将存储起来。 @encryptopt是 varchar(20),可以是以下值之一。
值 | 说明 |
---|---|
NULL (默认值) |
以明文形式传递密码。 |
skip_encryption |
密码已经过哈希运算。 数据库引擎应存储该值,而不重写该值。 |
skip_encryption_old |
提供的密码由 SQL Server 的早期版本进行哈希处理。 数据库引擎应存储该值,而不重写该值。 提供该选项只是为了升级。 |
返回代码值
0
(成功)或 1
(失败)。
注解
SQL Server 登录名可以包含 1 到 128 个字符,包括字母、符号和数字。 登录名不能包含反斜杠(\
);是保留的登录名,例如 sa 或 public,或者已存在;或者为 NULL
空字符串。
如果提供了默认数据库的名称,则可以在不执行 USE
语句的情况下连接到指定的数据库。 但是,在数据库所有者(使用sp_adduser、sp_addrolemember)或sp_addrole授予对该数据库的访问权限之前,不能使用默认数据库。
SID 号是一个 GUID,用于唯一标识服务器中的登录名。
更改服务器的默认语言不会更改现有登录名的默认语言。 若要更改服务器的默认语言,请使用 sp_configure。
如果在将登录名添加到 SQL Server 时已对密码进行哈希处理,则用于 skip_encryption
取消密码哈希。 如果密码由早期版本的 SQL Server 哈希处理,请使用 skip_encryption_old
。
sp_addlogin
无法在用户定义的事务中执行。
下表显示了用于的几个存储过程 sp_addlogin
。
存储过程 | 说明 |
---|---|
sp_grantlogin | 添加 Windows 用户或组。 |
sp_password | 更改用户密码。 |
sp_defaultdb | 更改用户的默认数据库。 |
sp_defaultlanguage | 更改用户的默认语言。 |
权限
需要 ALTER ANY LOGIN 权限。
示例
A. 创建 SQL Server 登录名
以下示例使用密码B1r12-36
为用户Victoria
创建 SQL Server 登录名,而无需指定默认数据库。
EXEC sp_addlogin 'Victoria', 'B1r12-36';
GO
B. 创建具有默认数据库的 SQL Server 登录名
以下示例为用户 Albert
创建一个 SQL Server 登录名,其中包含密码 B5432-3M6
和默认数据库 corporate
。
EXEC sp_addlogin 'Albert', 'B5432-3M6', 'corporate';
GO
°C 创建具有不同默认语言的 SQL Server 登录名
以下示例为用户 TzTodorov
创建一个 SQL Server 登录名,其中包含密码 709hLKH7chjfwv
、默认数据库 AdventureWorks2022
和默认语言 Bulgarian
。
EXEC sp_addlogin 'TzTodorov', '709hLKH7chjfwv', 'AdventureWorks2022', N'български'
D. 创建具有特定 SID 的 SQL Server 登录名
以下示例为用户Michael
创建 SQL Server 登录名,其密码B548bmM%f6
为默认数据库AdventureWorks2022
、默认语言和 us_english
SID。0x0123456789ABCDEF0123456789ABCDEF
EXEC sp_addlogin 'Michael', 'B548bmM%f6', 'AdventureWorks2022', 'us_english', 0x0123456789ABCDEF0123456789ABCDEF