1.sp_addlogin
创建新的SQL Server登录,该登录允许用户使用SQL Server身份验证连接到SQL Server实例。
语法sp_addlogin[ @loginame =] 'login'
[ ,[ @passwd =] 'password']
[ ,[ @defdb =] 'database']
[ ,[ @deflanguage =] 'language']
[ ,[ @sid =] sid ]
[ ,[ @encryptopt=] 'encryption_option']
参数
[ @loginame =] 'login'
登录的名称。login的数据类型为sysname,无默认值。
[ @passwd =] 'password'
登录的密码。password的数据类型为sysname,默认值为NULL。安全说明:
不要使用空密码。请使用强密码。
[ @defdb =] 'database'
登录的默认数据库(在登录后登录首先连接到该数据库)。database的数据类型为sysname,默认值为master。
[ @deflanguage =] 'language'
登录的默认语言。language的数据类型为sysname,默认值为NULL。如果未指定language,则新登录的默认language将设置为服务器的当前默认语言。
[ @sid =] 'sid'
安全标识号(SID)。sid的数据类型为varbinary(16),默认值为NULL。如果sid为NULL,则系统将为新登录生成SID。不管是否使用varbinary数据类型,NULL以外的值的长度都必须正好是16个字节,并且一定不能已经存在。指定sid非常有用,例如,如果您要编写脚本,或将SQL Server登录从一台服务器移动到另一台服务器,并且想让登录在不同服务器上使用相同的SID,都需要指定它。
[ @encryptopt =] 'encryption_option'
指定是以明文形式,还是以明文密码的哈希运算结果来传递密码。注意,不进行加密。在本讨论中使用“加密”一词是为了向后兼容。如果传入明文密码,将对它进行哈希运算。哈希值将存储起来。encryption_option的数据类型为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登录
以下示例为用户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,默认数据库为AdventureWorks,默认语言为Bulgarian。复制代码
EXEC sp_addlogin 'TzTodorov', '709hLKH7chjfwv', 'AdventureWorks', N'?????????'
D.创建具有特定SID的SQL Server登录
以下示例为用户Michael创建SQL Server登录,密码为B548bmM%f6,默认数据库为AdventureWorks,默认语言为us_english,SID为0x0123456789ABCDEF0123456789ABCDEF。复制代码
EXEC sp_addlogin 'Michael', 'B548bmM%f6', 'AdventureWorks', 'us_english', 0x0123456789ABCDEF0123456789ABCDEF
2. sp_adduser
向当前数据库中添加新的用户。
语法sp_adduser [ @loginame =] 'login' [ ,[ @name_in_db =] 'user'] [ ,[ @grpname =] 'role']
参数
[ @loginame =] 'login'
SQL Server登录或Windows登录的名称。login的数据类型为sysname,无默认值。login必须是现有的SQL Server登录名或Windows登录名。
[ @name_in_db =] 'user'
新数据库用户的名称。user的数据类型为sysname,默认值为NULL。如果未指定user,则新数据库用户的名称默认为login名称。指定user将为数据库中新用户赋予一个不同于服务器级别登录名的名称。
[ @grpname =] 'role'
新用户成为其成员的数据库角色。role的数据类型为sysname,默认值为NULL。role必须是当前数据库中的有效数据库角色。
返回代码值
0(成功)或1(失败)
备注
sp_adduser还将创建一个具有该用户名的架构。
在添加完用户之后,可以使用GRANT、DENY和REVOKE等语句来定义控制用户所执行的活动的权限。
使用sys.server_principals可显示有效登录名的列表。
使用sp_helprole可显示有效角色名的列表。当指定一个角色时,用户会自动地获得那些为该角色定义的权限。如果未指定角色,则用户获得的权限将是授予默认public角色的权限。若要将用户添加到角色,必须提供user name的值。((username可与login_id相同。)
用户guest已经存在于每个数据库中。如果此前禁用了用户,则添加用户guest可启用该用户。默认情况下,会在新数据库中禁用用户guest。
不能在用户定义事务内执行sp_adduser。
您不能添加guest用户,因为guest用户已经存在于每个数据库内。若要启用guest用户,请按如下方式授予guestCONNECT权限:复制代码
GRANT CONNECT TO guest;
GO
权限
要求具有数据库的所有权。
示例
A.添加数据库用户
以下示例使用现有的SQL Server登录名Vidur,将数据库用户Vidur添加到当前数据库中的现有Recruiting角色。复制代码
EXEC sp_adduser 'Vidur', 'Vidur', 'Recruiting'
B.添加数据库用户(使用相同的登录ID)
以下示例将用户Arvind添加到SQL Server登录名Arvind的当前数据库。该用户属于默认的public角色。复制代码
EXEC sp_adduser 'Arvind'
C.添加数据库用户(使用不同于其服务器级别登录的名称)
以下示例将SQL Server登录名BjornR添加到具有用户名Bjorn的当前数据库,并将数据库用户Bjorn添加到Production数据库角色。复制代码
EXEC sp_adduser 'BjornR', 'Bjorn', 'Production'
例子:
添加用户名:bt,密码:111pain
execute sp_addlogin 'bt','111pain'
go
execute sp_adduser 'bt','bt','db_owner'