sp_addlogin (Transact-SQL)

适用于:SQL Server (所有受支持的版本)

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

重要

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

重要

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

主题链接图标Transact-SQL 语法约定

语法

  
sp_addlogin [ @loginame = ] 'login'   
    [ , [ @passwd = ] 'password' ]   
    [ , [ @defdb = ] 'database' ]   
    [ , [ @deflanguage = ] 'language' ]   
    [ , [ @sid = ] sid ]   
    [ , [ @encryptopt = ] 'encryption_option' ]   
[;]  

参数

[ ] @loginame= 'login'
登录的名称。 登录 名为 sysname,没有默认值。

[ ] @passwd= 'password'
登录的密码。 passwordsysname,默认值为 NULL。

重要

不要使用空密码。 请使用强密码。

[ ] @defdb= 'database'
登录的默认数据库(在登录后登录首先连接到该数据库)。 数据库sysname,默认为 master

[ @deflanguage= ] 'language'
登录的默认语言。 语言sysname,默认值为 NULL。 如果未指定 语言 ,新登录名的默认 语言 将设置为服务器的当前默认语言。

[ ] @sid= 'sid'
安全标识号 (SID)。 sidvarbinary (16) ,默认值为 NULL。 如果 sid 为 NULL,系统会为新登录名生成 SID。 尽管使用了 varbinary 数据类型,但 NULL 以外的值长度必须为 16 字节,并且尚不存在。 例如,指定 sid 非常有用,例如,编写脚本或将SQL Server登录名从一台服务器移动到另一台服务器,并且希望登录名在不同的服务器上具有相同的 SID。

[ @encryptopt= ] “encryption_option
指定是以明文形式,还是以明文密码的哈希运算结果来传递密码。 注意,不进行加密。 在本讨论中使用“加密”一词是为了向后兼容。 如果传入明文密码,将对它进行哈希运算。 哈希值将存储起来。 encryption_optionvarchar (20) ,可以是下列值之一。

说明
Null 以明文形式传递密码。 这是默认值。
skip_encryption 密码已经过哈希运算。 数据库引擎应存储该值,而无需重新对其进行哈希处理。
skip_encryption_old 提供的密码由早期版本的SQL Server哈希处理。 数据库引擎应存储该值,而无需重新对其进行哈希处理。 提供该选项只是为了升级。

返回代码值

0(成功)或 1(失败)

备注

SQL Server登录名可以包含 1 到 128 个字符,包括字母、符号和数字。 登录名不能包含反斜杠 (\) ;是保留登录名,例如 sa 或 public,或者已存在;或为 NULL 或空字符串 () ''

如果提供默认数据库的名称,则不用执行 USE 语句就可以连接到指定的数据库。 但是,在使用 sp_addusersp_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 登录

以下示例为用户Victoria创建一个SQL Server登录名,其中包含密码B1r12-36,而不指定默认数据库。

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、默认数据库AdventureWorks2012和默认语言Bulgarian

EXEC sp_addlogin 'TzTodorov', '709hLKH7chjfwv', 'AdventureWorks2012', N'български'  

D. 创建具有特定 SID 的 SQL Server 登录

以下示例为用户Michael创建一个SQL Server登录名,其中包含密码B548bmM%f6、默认数据库AdventureWorks2012、默认语言us_english和 SID。0x0123456789ABCDEF0123456789ABCDEF

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

另请参阅

CREATE LOGIN (Transact-SQL)
sp_droplogin (Transact-SQL)
sp_helpuser (Transact-SQL)
sp_revokelogin (Transact-SQL)
xp_logininfo (Transact-SQL)