SQL添加新用户(上)

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_englishSID 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,默认值为 NULLrole 必须是当前数据库中的有效数据库角色。

返回代码值

0(成功)或 1(失败)

备注

sp_adduser 还将创建一个具有该用户名的架构。

在添加完用户之后,可以使用 GRANTDENY REVOKE 等语句来定义控制用户所执行的活动的权限。

使用 sys.server_principals 可显示有效登录名的列表。

使用 sp_helprole 可显示有效角色名的列表。当指定一个角色时,用户会自动地获得那些为该角色定义的权限。如果未指定角色,则用户获得的权限将是授予默认 public 角色的权限。若要将用户添加到角色,必须提供 user name 的值。(username 可与 login_id 相同。)

用户 guest 已经存在于每个数据库中。如果此前禁用了用户,则添加用户 guest 可启用该用户。默认情况下,会在新数据库中禁用用户 guest

不能在用户定义事务内执行 sp_adduser

您不能添加 guest 用户,因为 guest 用户已经存在于每个数据库内。若要启用 guest 用户,请按如下方式授予 guest CONNECT 权限:

 

复制代码

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'

posted @ 2007-09-25 11:38  杰仔  阅读(1791)  评论(0编辑  收藏  举报