CREATE USER (Transact-SQL)

向当前数据库添加用户。

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

语法

CREATE USER user_name 
    [ { { FOR | FROM }
      { 
        LOGIN login_name 
        | CERTIFICATE cert_name 
        | ASYMMETRIC KEY asym_key_name
      } 
      | WITHOUT LOGIN
    ] 
    [ WITH DEFAULT_SCHEMA = schema_name ]

参数

  • user_name
    指定在此数据库中用于标识该用户的名称。user_name 是 sysname。它的长度最多是 128 个字符。

  • LOGIN login_name
    指定要为其创建数据库用户的 SQL Server 登录名。login_name 必须是服务器中有效的登录名。当此 SQL Server 登录名进入数据库时,它将获取正在创建的数据库用户的名称和 ID。

  • CERTIFICATE cert_name
    指定要为其创建数据库用户的证书。

  • ASYMMETRIC KEY asym_key_name
    指定要为其创建数据库用户的非对称密钥。

  • WITH DEFAULT_SCHEMA **=**schema_name
    指定服务器为此数据库用户解析对象名时将搜索的第一个架构。

  • WITHOUT LOGIN
    指定不应将用户映射到现有登录名。

注释

如果已忽略 FOR LOGIN,则新的数据库用户将被映射到同名的 SQL Server 登录名。

如果未定义 DEFAULT_SCHEMA,则数据库用户将使用 dbo 作为其默认架构。可以将 DEFAULT_SCHEMA 设置为数据库中当前不存在的架构。DEFAULT_SCHEMA 可在创建它所指向的架构前进行设置。在创建映射到 Windows 组、证书或非对称密钥的用户时,不能指定 DEFAULT_SCHEMA。

重要说明重要提示

如果用户是 sysadmin 固定服务器角色的成员,则忽略 DEFAULT_SCHEMA 的值。sysadmin 固定服务器角色的所有成员都有默认架构 dbo。

WITHOUT LOGIN 子句可创建不映射到 SQL Server 登录名的用户。它可以作为 guest 连接到其他数据库。

映射到 SQL Server 登录名、证书或非对称密钥的用户名不能包含反斜杠字符 (\)。

不能使用 CREATE USER 创建 guest 用户,因为每个数据库中均已存在 guest 用户。可通过授予 guest 用户 CONNECT 权限来启用该用户,如下所示:

GRANT CONNECT TO guest;
GO

可以在 sys.database_principals 目录视图中查看有关数据库用户的信息。

注意事项注意

从 SQL Server 2005 开始,架构的行为发生了更改。因此,假设架构与数据库用户等价的代码不再返回正确的结果。旧目录视图(包括 sysobjects)不应该用在曾使用过下列任何 DDL 语句的数据库中:CREATE SCHEMA、ALTER SCHEMA、DROP SCHEMA、CREATE USER、ALTER USER、DROP USER、CREATE ROLE、ALTER ROLE、DROP ROLE、CREATE APPROLE、ALTER APPROLE、DROP APPROLE 或 ALTER AUTHORIZATION。在这类数据库中,必须改用新目录视图。新的目录视图将采用在 SQL Server 2005 中引入的使主体和架构分离的方法。有关目录视图的详细信息,请参阅目录视图 (Transact-SQL)。

权限

需要对数据库具有 ALTER ANY USER 权限。

示例

A. 创建数据库用户

下面的示例首先创建名为 AbolrousHazem 且具有密码的服务器登录名,然后在 AdventureWorks2008R2 中创建对应的数据库用户 AbolrousHazem。

CREATE LOGIN AbolrousHazem 
    WITH PASSWORD = '340$Uuxwp7Mcxo7Khy';
USE AdventureWorks2008R2;
CREATE USER AbolrousHazem FOR LOGIN AbolrousHazem;
GO 

B. 创建具有默认架构的数据库用户

下面的示例首先创建名为 WanidaBenshoof 且具有密码的服务器登录名,然后创建具有默认架构 Marketing 的对应数据库用户 Wanida。

CREATE LOGIN WanidaBenshoof 
    WITH PASSWORD = '8fdKJl3$nlNv3049jsKK';
USE AdventureWorks2008R2;
CREATE USER Wanida FOR LOGIN WanidaBenshoof 
    WITH DEFAULT_SCHEMA = Marketing;
GO

C. 从证书创建数据库用户

下面的示例从证书 CarnationProduction50 创建数据库用户 JinghaoLiu。

USE AdventureWorks2008R2;
CREATE CERTIFICATE CarnationProduction50
    WITH SUBJECT = 'Carnation Production Facility Supervisors',
    EXPIRY_DATE = '11/11/2011';
GO
CREATE USER JinghaoLiu FOR CERTIFICATE CarnationProduction50;
GO 

D. 创建和使用不含登录名的用户

以下示例创建一个数据库用户 CustomApp,该用户不映射到 SQL Server 登录名。该示例然后向用户 adventure-works\tengiz0 授予相应权限以便模拟 CustomApp 用户。

USE AdventureWorks2008R2 ;
CREATE USER CustomApp WITHOUT LOGIN ;
GRANT IMPERSONATE ON USER::CustomApp TO [adventure-works\tengiz0] ;
GO 

为了使用 CustomApp 凭据,用户 adventure-works\tengiz0 执行以下语句。

EXECUTE AS USER = 'CustomApp' ;
GO

为了恢复到 adventure-works\tengiz0 凭据,该用户执行以下语句。

REVERT ;
GO