sp_addlogin (Transact-SQL)

适用于:SQL Server

创建一个新的 SQL Server 登录名,允许用户使用 SQL Server 身份验证连接到 SQL Server 实例。

重要

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

重要

请尽可能使用 Windows 身份验证。

Transact-SQL 语法约定

语法

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)。 @sidvarbinary(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 个字符,包括字母、符号和数字。 登录名不能包含反斜杠(\);是保留的登录名,例如 sapublic,或者已存在;或者为 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_englishSID。0x0123456789ABCDEF0123456789ABCDEF

EXEC sp_addlogin 'Michael', 'B548bmM%f6', 'AdventureWorks2022', 'us_english', 0x0123456789ABCDEF0123456789ABCDEF