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 под этим именем база данных запросит имя и идентификатор созданного пользователя базы данных.

  • 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 может быть установлено до создания схемы, на которую оно указывает. Значение DEFAULT_SCHEMA не может указываться при создании пользователя, сопоставленного с группой Windows, сертификатом или асимметричным ключом.

Важное примечаниеВажно!

Значение параметра DEFAULT_SCHEMA не учитывается, если пользователь является членом предопределенной роли сервера sysadmin. Для всех членов предопределенной роли сервера sysadmin по умолчанию установлена схема dbo.

Предложение WITHOUT LOGIN создает пользователя, который не сопоставляется с именем входа SQL Server. Такой пользователь может подключиться к базе данных как guest.

Имена пользователей, сопоставленные с именами входа SQL Server, сертификатами или асимметричными ключами, не могут содержать обратную косую черту (\).

С помощью инструкции CREATE USER нельзя создать пользователя guest, потому что пользователь guest уже существует в каждой базе данных. Активировать пользователя guest можно, предоставив ему разрешение CONNECT, как показано далее:

GRANT CONNECT TO guest;
GO

Данные о пользователях базы данных отображаются в представлении каталога sys.server_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 для базы данных.

Примеры

А. Создание пользователя базы данных

В следующем примере вначале создается имя входа AbolrousHazem с паролем на сервер, а затем в базе данных AdventureWorks2008R2 создается соответствующий пользователь AbolrousHazem.

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

Б. Создание пользователя базы данных со схемой по умолчанию

В следующем примере вначале создается имя входа WanidaBenshoof с паролем на сервер, а затем в базе данных создается соответствующий пользователь Wanida со схемой по умолчанию Marketing.

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

В. Создание пользователя базы данных из сертификата

В следующем примере в базе данных создается пользователь JinghaoLiu из сертификата CarnationProduction50.

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

Г. Создание и использование пользователя без имени входа

В следующем примере создается пользователь базы данных 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