sp_adduser (Transact-SQL)

向当前数据库中添加新的用户。

重要说明重要提示

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

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

语法

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 用户,请按如下方式授予 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'

请参阅

参考

安全存储过程 (Transact-SQL)

sys.server_principals (Transact-SQL)

sp_addrole (Transact-SQL)

CREATE USER (Transact-SQL)

sp_dropuser (Transact-SQL)

sp_grantdbaccess (Transact-SQL)

sp_grantlogin (Transact-SQL)

系统存储过程 (Transact-SQL)