CREATE USER (Transact-SQL)

 

Добавляет нового пользователя в текущую базу данных.Существует одиннадцать типов пользователей.

Пользователи с именами входа в базе данных master. Это самый распространенный тип пользователей.

  • Пользователь с именем входа, задаваемым по пользователю Windows.

  • Пользователь с именем входа, задаваемым по группе Windows.

  • Пользователь с именем входа для проверки подлинности SQL Server.

Пользователи, проходящие проверку подлинности в базе данных. Допускается только в автономной базе данных.

  • Пользователь, соответствующий пользователю Windows без имени входа.

  • Пользователь, соответствующий группе Windows без имени входа.

  • Пользователь автономной базы данных с паролем.

Пользователи, соответствующие участникам Windows, которые подключаются с помощью имен входа группы Windows

  • Пользователь, соответствующий пользователю Windows, который не имеет имени входа, но может подключаться к компоненту Компонент Database Engine за счет членства в роли Windows.

  • Пользователь, соответствующий группе Windows, которая не имеет имени входа, но может подключаться к компоненту Компонент Database Engine за счет членства в другой роли Windows.

Пользователи, которые не могут проходить проверку подлинности. Такие пользователи не могут входить на SQL Server или База данных SQL.

  • Пользователь без имени входа.Не может выполнить вход, но ему можно предоставлять разрешения.

  • Пользователь, связанный с сертификатом.Не может выполнить вход, но может предоставлять разрешения и подписывать модули.

  • Пользователь, связанный с асимметричным ключом.Не может выполнить вход, но может предоставлять разрешения и подписывать модули.

Область применения: SQL Server (начиная с SQL Server 2008 до текущей версии), База данных SQL Azure, База данных SQL V12, (предварительная версия в некоторых регионах).

Значок ссылки на разделCинтаксические обозначения в Transact-SQL

Синтаксис

          -- SQL Server Syntax

          -- Users based on logins in master
CREATE USER user_name 
    [ 
        { FOR | FROM } LOGIN login_name 
    ]
    [ WITH DEFAULT_SCHEMA = schema_name ] 
[ ; ]

-- Users that authenticate at the database (SQL Database Update (Preview) can use most options)
CREATE USER 
    {
      windows_principal [ WITH <options_list> [ ,... ] ]
    | user_name WITH PASSWORD = 'password' [ , <options_list> [ ,... ] 
    }
 [ ; ]

-- Users based on Windows principals that connect through Windows group logins
CREATE USER 
    { 
          windows_principal [ { FOR | FROM } LOGIN windows_principal ]
        | user_name { FOR | FROM } LOGIN windows_principal
    }
    [ WITH DEFAULT_SCHEMA = schema_name ] 
[ ; ]

-- Users that cannot authenticate 
CREATE USER user_name 
    {
         WITHOUT LOGIN [ WITH DEFAULT_SCHEMA = schema_name ]
       | { FOR | FROM } CERTIFICATE cert_name 
       | { FOR | FROM } ASYMMETRIC KEY asym_key_name 
    }
 [ ; ]

<options_list> ::=
      DEFAULT_SCHEMA = schema_name
    | DEFAULT_LANGUAGE = { NONE | lcid | language name | language alias }
    | SID = sid
          -- Windows Azure SQL Database
CREATE USER user_name
    [ { { FOR | FROM }
      { 
        LOGIN login_name 
      } 
      | WITHOUT LOGIN
      }
    ] 
    [ WITH DEFAULT_SCHEMA = schema_name ] 
[;]

-- SQL Database syntax when connected to a federation member
CREATE USER user_name
[;]

Аргументы

  • user_name
    Указывает имя, по которому пользователь идентифицируется в этой базе данных.user_name имеет тип sysname.Он может иметь длину до 128 символов.Когда создается пользователь, соответствующий участнику Windows, именем пользователя становится имя участника Windows, если не указано другое имя.

  • LOGIN login_name
    Указывает имя входа, для которого создается пользователь базы данных.login_name должен быть допустимым именем входа на сервере.Может быть именем входа, соответствующим участнику Windows (пользователю или группе) или именем входа для проверки подлинности SQL Server.Когда это имя входа SQL Server входит в базу данных, оно получает имя и идентификатор создаваемого пользователя базы данных.При создании имени входа, сопоставленного с участником Windows, используйте формат [<domainName>\<loginName>].Примеры см. в разделе Сводка синтаксиса.

    Если инструкция CREATE USER — единственная инструкция в пакете SQL, то база данных SQL Windows Azure поддерживает предложение WITH LOGIN.Если инструкция CREATE USER не единственная в пакете SQL или выполняется в динамическом коде SQL, предложение WITH LOGIN не поддерживается.

  • WITH DEFAULT_SCHEMA = schema_name
    Указывает первую схему, которую найдет сервер, после того, как он получит имена объектов для пользователя данной базы данных.

  • windows_principal"
    Указывает участника Windows, для которого создается пользователь базы данных.Аргумент windows_principal может быть пользователем Windows или группой Windows.Пользователь будет создаваться даже в случае, если для windows_principal отсутствует имя входа.Если при подключении к SQL Server для windows_principal отсутствует имя входа,то участник Windows должен пройти проверку подлинности в компоненте Компонент Database Engine за счет членства в группе Windows, имеющей имя входа, либо в строке подключения в качестве исходного каталога должна указываться автономная база данных.При создании пользователя, сопоставленного с участником Windows, используйте формат [<domainName>\<loginName>].Примеры см. в разделе Сводка синтаксиса.

  • WITH PASSWORD = 'password'

    Область применения: начиная с SQL Server 2012 до SQL Server 2014, База данных SQL V12.

    Может использоваться только в автономной базе данных.Задает пароль для создаваемого пользователя.

  • WITHOUT LOGIN
    Указывает, что пользователь не должен сопоставляться с существующим именем входа.

  • CERTIFICATE cert_name

    Область применения: начиная с SQL Server 2008 до SQL Server 2014, База данных SQL V12.

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

  • ASYMMETRIC KEY asym_key_name

    Область применения: начиная с SQL Server 2008 до SQL Server 2014, База данных SQL V12.

    Указывает асимметричный ключ, для которого создается пользователь базы данных.

  • DEFAULT_LANGUAGE = { NONE | <lcid> | <language name> | <language alias> }

    Область применения: начиная с SQL Server 2012 до SQL Server 2014, База данных SQL V12.

    Задает язык по умолчанию для нового пользователя.Если для пользователя задается язык по умолчанию, а затем язык базы данных по умолчанию изменяется, то язык по умолчанию для пользователя сохраняет указанное значение.Если язык по умолчанию не указывается, то языком по умолчанию для пользователя становится язык по умолчанию для базы данных.Если язык по умолчанию для пользователя не указывается, а язык по умолчанию для базы данных изменяется после создания пользователя, то язык по умолчанию для пользователя меняется на новый язык по умолчанию для базы данных.

    Важно!

    Аргумент DEFAULT_LANGUAGE используется только для пользователя автономной базы данных.

  • SID = sid

    Область применения: начиная с SQL Server 2012 до SQL Server 2014.

    Применимо только для пользователей с паролями (проверка подлинности SQL Server ) в автономной базе данных.Указывает идентификатор SID нового пользователя базы данных.Если этот параметр не выбран, SQL Server назначает идентификатор SID автоматически.Используйте параметр идентификатора SID для создания пользователей в нескольких базах данных с одинаковыми идентификаторами SID.Это удобно при создании пользователей в нескольких базах данных для подготовки обработки отказа AlwaysOn.Чтобы определить идентификатор SID пользователя, выполните запрос к таблице sys.database_principals.

Заметки

Если предложение FOR LOGIN не указано, новый пользователь базы данных будет сопоставлен с именем входа SQL Server, имеющим такое же имя.

Схемой по умолчанию будет первая схема, которую найдет сервер, после того, как получит имена объектов для данного пользователя базы данных.Если не указано иное, схемой по умолчанию будет владелец объектов, создаваемых этим пользователем базы данных.

Если пользователь имеет схему по умолчанию, будет использоваться эта схема.Если у пользователя нет схемы по умолчанию, но он является членом группы, которая имеет схему по умолчанию, используется схема по умолчанию группы.Если пользователь не имеет схемы по умолчанию и является членом нескольких групп, схемой по умолчанию для этого пользователя будет схема по умолчанию группы Windows с минимальным значением principal_id и явно заданной схемой по умолчанию.(Невозможно явно выбрать одну из доступных схем по умолчанию как предпочтительную.)Если для пользователя нельзя определить схему по умолчанию, будет использоваться схема dbo.

Значение DEFAULT_SCHEMA может быть установлено до создания схемы, на которую оно указывает.

Значение DEFAULT_SCHEMA не может указываться при создании пользователя, сопоставленного с сертификатом или асимметричным ключом.

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

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

Символ обратной косой черты (\) может содержаться только в именах пользователей, сопоставленных с участниками Windows.

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

GRANT CONNECT TO guest;
GO

Данные о пользователях базы данных отображаются в представлении каталога sys.server_principals.

Сводка синтаксиса

Пользователи, соответствующие именам входа в базе данных master

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

  • CREATE USER [Domain1\WindowsUserBarry]

  • CREATE USER [Domain1\WindowsUserBarry] FOR LOGIN Domain1\WindowsUserBarry

  • CREATE USER [Domain1\WindowsUserBarry] FROM LOGIN Domain1\WindowsUserBarry

  • CREATE USER [Domain1\WindowsGroupManagers]

  • CREATE USER [Domain1\WindowsGroupManagers] FOR LOGIN [Domain1\WindowsGroupManagers]

  • CREATE USER [Domain1\WindowsGroupManagers] FROM LOGIN [Domain1\WindowsGroupManagers]

  • CREATE USER SQLAUTHLOGIN

  • CREATE USER SQLAUTHLOGIN FOR LOGIN SQLAUTHLOGIN

  • CREATE USER SQLAUTHLOGIN FROM LOGIN SQLAUTHLOGIN

Пользователи, проходящие проверку подлинности в базе данных

В следующем списке показан возможный синтаксис для пользователей, которые могут использоваться только в автономной базе данных.Созданные пользователи не будут связаны с именами входа в базе данных master.Параметры схемы и языковые параметры, задаваемые по умолчанию, не указываются.

System_CAPS_security Безопасность Примечание

Этот синтаксис предоставляет пользователям доступ к базе данных и новый доступ к компоненту Компонент Database Engine.

  • CREATE USER [Domain1\WindowsUserBarry]

  • CREATE USER [Domain1\WindowsGroupManagers]

  • CREATE USER Barry WITH PASSWORD = 'sdjklalie8rew8337!$d'

Пользователи на основе участников Windows без подключения к базе данных master

В следующем списке показан возможный синтаксис для пользователей, имеющих доступ к компоненту Компонент Database Engine за счет членства в группе Windows, но не имеющих имени входа в базе данных master.Такой синтаксис можно использовать во всех типах базы данных.Параметры схемы и языковые параметры, задаваемые по умолчанию, не указываются.

Этот синтаксис аналогичен пользователям, соответствующим именам входа в базе данных master, однако пользователи данной категории не имеют имени входа в базе данных master.Пользователь должен получать доступ к компоненту Компонент Database Engine с помощью имени входа группы Windows.

Этот синтаксис аналогичен пользователям автономной базы данных, соответствующим участникам Windows, однако пользователи данной категории не получают новый доступ к компоненту Компонент Database Engine.

  • CREATE USER [Domain1\WindowsUserBarry]

  • CREATE USER [Domain1\WindowsUserBarry] FOR LOGIN Domain1\WindowsUserBarry

  • CREATE USER [Domain1\WindowsUserBarry] FROM LOGIN Domain1\WindowsUserBarry

  • CREATE USER [Domain1\WindowsGroupManagers]

  • CREATE USER [Domain1\WindowsGroupManagers] FOR LOGIN [Domain1\WindowsGroupManagers]

  • CREATE USER [Domain1\WindowsGroupManagers] FROM LOGIN [Domain1\WindowsGroupManagers]

Пользователи, которые не могут проходить проверку подлинности

В следующем списке показан возможный синтаксис для пользователей, которые не могут выполнять вход в SQL Server.

  • CREATE USER RIGHTSHOLDER WITHOUT LOGIN

  • CREATE USER CERTUSER FOR CERTIFICATE SpecialCert

  • CREATE USER CERTUSER FROM CERTIFICATE SpecialCert

  • CREATE USER KEYUSER FOR ASYMMETRIC KEY SecureKey

  • CREATE USER KEYUSER FROM ASYMMETRIC KEY SecureKey

Безопасность

При создании пользователя предоставляется доступ к базе данных, однако доступ к объектам в базе данных не предоставляется автоматически.После создания пользователи обычно добавляются в роли базы данных, которые имеют разрешение на доступ к объектам базы данных, либо разрешения на объект предоставляются непосредственно пользователю.

Замечания, относящиеся к автономным базам данных

Если при подключении к автономной базе данных пользователь не имеет имени входа в базе данных master, то строка подключения должна содержать имя автономной базы данных в качестве исходного каталога.Параметр исходного каталога всегда обязателен для пользователя автономной базы данных с паролем.

Создание пользователей в автономной базе данных позволяет отделить базу данных от экземпляра компонента Компонент Database Engine, что позволяет легко переместить ее в другой экземпляр SQL Server.Дополнительные сведения см. в разделе Автономные базы данных.Сведения об изменении пользователя базы данных с пользователя, соответствующего имени входа для проверки подлинности SQL Server, на пользователя автономной базы данных с паролем см. в разделе sp_migrate_user_to_contained (Transact-SQL).

В автономной базе данных пользователям не обязательно иметь имена входа в базе данных master.Администраторы Компонент Database Engine должны учитывать, что доступ к автономной базе данных можно предоставлять на уровне базы данных, а не на уровне компонента Компонент Database Engine.Дополнительные сведения см. в разделе Рекомендации по обеспечению безопасности автономных баз данных.

При использовании пользователей автономной базы данных База данных SQL Azure настройте доступ с помощью правила брандмауэра уровня базы данных вместо правила брандмауэра уровня сервера.Дополнительные сведения см. в разделе sp_set_database_firewall_rule (база данных SQL Azure).

Разрешения

Необходимо разрешение ALTER ANY USER для базы данных.

Примеры

A.Создание пользователя базы данных, соответствующего имени входа SQL Server

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

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

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

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

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

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

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

Область применения: начиная с SQL Server 2008 до SQL Server 2014.

USE AdventureWorks2012;
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 AdventureWorks2012 ;
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

Д.Создание пользователя автономной базы данных с паролем

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

Область применения: начиная с SQL Server 2012 до SQL Server 2014.Этот пример работает в База данных SQL V12, если удаляется DEFAULT_LANGUAGE.

USE AdventureWorks2012 ;
GO
CREATE USER Carlo
WITH PASSWORD='RN92piTCh%$!~3K9844 Bl*'
    , DEFAULT_LANGUAGE=[Brazilian]
    , DEFAULT_SCHEMA=[dbo]
GO 

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

В следующем примере создается пользователь автономной базы данных для имени входа Fritz в домене Contoso.Этот пример можно выполнить только в автономной базе данных.

Область применения: начиная с SQL Server 2012 до SQL Server 2014.

USE AdventureWorks2012 ;
GO
CREATE USER [Contoso\Fritz] ;
GO 

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

В следующем примере создается пользователь автономной базы данных с проверкой подлинности SQL Server, имя пользователя — CarmenW.Этот пример можно выполнить только в автономной базе данных.

Область применения: начиная с SQL Server 2012 до SQL Server 2014.

USE AdventureWorks2012 ;
GO
CREATE USER CarmenW WITH PASSWORD = 'a8ea v*(Rd##+'
, SID = 0x01050000000000090300000063FF0451A9E7664BA705B10E37DDC4B7;

См. также

Создание пользователя базы данных
sys.database_principals (Transact-SQL)
ALTER USER (Transact-SQL)
DROP USER (Transact-SQL)
CREATE LOGIN (Transact-SQL)
EVENTDATA (Transact-SQL)
Автономные базы данных