CREATE USER (Transact-SQL)
Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure базе данных SQL Azure Synapse Analytics Analytics Platform System (PDW) в Microsoft Fabric
Добавляет нового пользователя в текущую базу данных. 13 типов пользователей перечислены с примером наиболее базового синтаксиса:
Примечание.
Хотя идентификатор Microsoft Entra — это новое имя Azure Active Directory (Azure AD), чтобы предотвратить нарушение существующих сред, Azure AD по-прежнему остается в некоторых жестко закодированных элементах, таких как поля пользовательского интерфейса, поставщики подключений, коды ошибок и командлеты. В этой статье два имени являются взаимозаменяемыми.
Пользователи на основе имен входа в master
Пользователь с именем входа, задаваемым по учетной записи Windows Active Directory.
CREATE USER [Contoso\Fritz];
Пользователь с именем входа, задаваемым по группе Windows.
CREATE USER [Contoso\Sales];
Пользователь на основе имени входа с помощью проверки подлинности SQL Server.
CREATE USER Mary;
Пользователь на основе имени входа Microsoft Entra.
CREATE USER [bob@contoso.com] FROM LOGIN [bob@contoso.com]
Примечание.
Субъекты сервера Microsoft Entra (имена входа) в настоящее время находятся в общедоступной предварительной версии для База данных SQL Azure.
Примечание.
Имена входа и, следовательно, пользователи, основанные на именах входа, не поддерживаются в базе данных SQL в Microsoft Fabric.
Пользователи, проходящие проверку подлинности в базе данных. Рекомендуется для повышения переносимости базы данных.
Всегда разрешено в База данных SQL. Разрешено только в автономной базе данных в SQL Server.
Пользователь, соответствующий пользователю Windows без имени входа.
CREATE USER [Contoso\Fritz];
Пользователь, соответствующий группе Windows без имени входа.
CREATE USER [Contoso\Sales];
Пользователь в База данных SQL или Azure Synapse Analytics на основе пользователя Microsoft Entra.
CREATE USER [Fritz@contoso.com] FROM EXTERNAL PROVIDER;
Пользователь автономной базы данных с паролем. (Недоступно в Azure Synapse Analytics.)
CREATE USER Mary WITH PASSWORD = '********';
Пользователи, соответствующие субъектам Windows, которые подключаются с помощью имени входа группы Windows
Пользователь на основе пользователя Windows, не имеющего имени входа, но может подключаться к ядро СУБД через членство в группе Windows.
CREATE USER [Contoso\Fritz];
Пользователь на основе группы Windows, которая не имеет имени входа, но может подключаться к ядро СУБД через членство в другой группе Windows.
CREATE USER [Contoso\Fritz];
Пользователи, которые не могут пройти проверку подлинности. Эти пользователи не могут войти в SQL Server или База данных SQL.
- Пользователь без имени входа. Не удается войти, но может быть предоставлено разрешение.
CREATE USER CustomApp WITHOUT LOGIN;
- Пользователь, связанный с сертификатом. Не удается войти в систему, но может быть предоставлено разрешение и может подписывать модули.
CREATE USER TestProcess FOR CERTIFICATE CarnationProduction50;
- Пользователь, связанный с асимметричным ключом. Не удается войти в систему, но может быть предоставлено разрешение и может подписывать модули.
CREATE User TestProcess FROM ASYMMETRIC KEY PacificSales09;
Соглашения о синтаксисе Transact-SQL
Синтаксис
Синтаксис SQL Server, База данных SQL Azure, Управляемый экземпляр SQL Azure
-- Syntax Users based on logins in master
CREATE USER user_name
[
{ FOR | FROM } LOGIN login_name
]
[ WITH <limited_options_list> [ ,... ] ]
[ ; ]
-- Users that authenticate at the database
CREATE USER
{
windows_principal [ WITH <options_list> [ ,... ] ]
| user_name WITH PASSWORD = 'password' [ , <options_list> [ ,... ]
| Microsoft_Entra_principal FROM EXTERNAL PROVIDER [WITH OBJECT_ID = 'objectid']
}
[ ; ]
-- 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 <limited_options_list> [ ,... ] ]
[ ; ]
-- Users that cannot authenticate
CREATE USER user_name
{
WITHOUT LOGIN [ WITH <limited_options_list> [ ,... ] ]
| { 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
| ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] ]
<limited_options_list> ::=
DEFAULT_SCHEMA = schema_name ]
| ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] ]
-- SQL Database syntax when connected to a federation member
CREATE USER user_name
[;]
-- Syntax for users based on Microsoft Entra logins for Azure SQL Managed Instance
CREATE USER user_name
[ { FOR | FROM } LOGIN login_name ]
| FROM EXTERNAL PROVIDER
[ WITH <limited_options_list> [ ,... ] ]
[ ; ]
<limited_options_list> ::=
DEFAULT_SCHEMA = schema_name
| DEFAULT_LANGUAGE = { NONE | lcid | language name | language alias }
| ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] ]
Синтаксис для Azure Synapse Analytics
CREATE USER user_name
[ { { FOR | FROM } { LOGIN login_name }
| WITHOUT LOGIN
]
[ WITH DEFAULT_SCHEMA = schema_name ]
[;]
CREATE USER Microsoft_Entra_principal FROM EXTERNAL PROVIDER
[ WITH DEFAULT_SCHEMA = schema_name ]
[;]
Синтаксис базы данных SQL в Microsoft Fabric
CREATE USER
{
Microsoft_Entra_principal FROM EXTERNAL PROVIDER [ WITH <limited_options_list> [ ,... ] ]
| Microsoft_Entra_principal WITH <options_list> [ ,... ]
}
[ ; ]
-- 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
}
[ ; ]
<limited_options_list> ::=
DEFAULT_SCHEMA = schema_name
| OBJECT_ID = 'objectid'
<options_list> ::=
DEFAULT_SCHEMA = schema_name
| SID = sid
| TYPE = { X | E }
Синтаксис для параллельного хранилища данных
CREATE USER user_name
[ { { FOR | FROM }
{
LOGIN login_name
}
| WITHOUT LOGIN
]
[ WITH DEFAULT_SCHEMA = schema_name ]
[;]
Аргументы
user_name
Указывает имя, по которому пользователь идентифицируется в этой базе данных. user_name — это sysname. Он может иметь длину до 128 символов. Когда создается пользователь, соответствующий участнику Windows, именем пользователя становится имя участника Windows, если не указано другое имя.
LOGIN login_name
Указывает имя входа, для которого создается пользователь базы данных. login_name должен быть допустимым именем входа на сервере. Может быть именем входа на основе субъекта Windows (пользователя или группы), имени входа с помощью проверки подлинности SQL Server или имени входа с помощью субъекта Microsoft Entra (пользователя, группы или приложения). Когда это имя входа SQL Server входит в базу данных, оно получает имя и идентификатор создаваемого пользователя базы данных. При создании имени для входа, сопоставленного с субъектом Windows, используйте формат[<domainName>\<loginName>]. Примеры см. в разделе Сводка синтаксиса.
Если CREATE USER является единственной инструкцией в пакете SQL, предложение WITH LOGIN поддерживается в Базе данных SQL Azure. Если инструкция 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 должен пройти проверку подлинности в ядре СУБД за счет членства в группе Windows, содержащей имя для входа, либо в строке подключения в качестве исходного каталога должна указываться автономная база данных. При создании пользователя из субъекта Windows используйте формат [<domainName>\<loginName>]. Примеры см. в разделе Сводка синтаксиса. Имена пользователей, основанные на пользователях Active Directory, могут иметь не более 21 символа в длину.
"Microsoft_Entra_principal"
Область применения: База данных SQL, Управляемый экземпляр SQL, Azure Synapse Analytics, база данных SQL в Microsoft Fabric
Указывает субъект Microsoft Entra, для которого создается пользователь базы данных. Microsoft_Entra_principal может быть пользователем Microsoft Entra, группой Microsoft Entra или приложением Microsoft Entra. (Пользователи Microsoft Entra не могут иметь имена входа проверки подлинности Windows в База данных SQL; только пользователи базы данных.) Строка подключения должен указать содержащуюся базу данных в качестве начального каталога.
Для субъектов Microsoft Entra требуется синтаксис CREATE USER:
UserPrincipalName объекта Microsoft Entra для пользователей Microsoft Entra.
CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER;
CREATE USER [alice@fabrikam.onmicrosoft.com] FROM EXTERNAL PROVIDER;
Субъекты сервера Microsoft Entra (имена входа) представляют создание пользователей, сопоставленных с именами входа Microsoft Entra в виртуальной
master
базе данных. Например:CREATE USER [bob@contoso.com] FROM LOGIN [bob@contoso.com];
Пользователи Microsoft Entra и субъекты-службы (приложения), которые являются членами более 2048 групп безопасности Microsoft Entra, не поддерживаются для входа в базы данных в База данных SQL Azure, Управляемый экземпляр SQL Azure или Azure Synapse.
DisplayName объекта Microsoft Entra для групп Microsoft Entra и Приложений Microsoft Entra. Для группы безопасности Nurses будет отображаться следующее:
CREATE USER [Nurses] FROM EXTERNAL PROVIDER;
Дополнительные сведения см. в разделе "Подключение к База данных SQL с помощью проверки подлинности Microsoft Entra".
WITH PASSWORD = 'password'
Область применения: SQL Server 2012 (11.x) и более поздних версий База данных SQL.
Может использоваться только в автономной базе данных. Задает пароль для создаваемого пользователя. Начиная с SQL Server 2012 (11.x), сохраненные сведения о пароле вычисляются с помощью SHA-512 "соленого" пароля.
WITHOUT LOGIN
Указывает, что пользователь не должен сопоставляться с существующими учетными данными.
CERTIFICATE cert_name
Область применения: SQL Server 2008 (10.0.x) и более поздних версий, База данных SQL, база данных SQL в Microsoft Fabric
Указывает сертификат, для которого создается пользователь базы данных.
ASYMMETRIC KEY asym_key_name
Область применения: SQL Server 2008 (10.0.x) и более поздних версий, База данных SQL, база данных SQL в Microsoft Fabric
Указывает асимметричный ключ, для которого создается пользователь базы данных.
DEFAULT_LANGUAGE = { NONE | <lcid> | <language name> | <language salias> }
Область применения: SQL Server 2012 (11.x) и более поздних версий База данных SQL
Задает язык по умолчанию для нового пользователя. Если для пользователя задается язык по умолчанию, а затем язык базы данных по умолчанию изменяется, то язык по умолчанию для пользователя сохраняет указанное значение. Если язык по умолчанию не указывается, то языком по умолчанию для пользователя становится язык по умолчанию для базы данных. Если язык по умолчанию для пользователя не указывается, а язык по умолчанию для базы данных через некоторое время изменяется, то язык по умолчанию для пользователя меняется на новый язык по умолчанию для базы данных.
Внимание
Аргумент DEFAULT_LANGUAGE используется только для пользователя автономной базы данных.
SID = sid
Область применения: SQL Server 2012 (11.x) и более поздних версий, а также к базе данных SQL в Microsoft Fabric.
В SQL Server 2012 (11.x) и более поздних версиях применяется только к пользователям с паролями (проверка подлинности SQL Server) в автономной базе данных. Указывает идентификатор SID нового пользователя базы данных. Если этот параметр не выбран, SQL Server назначает идентификатор SID автоматически. Используйте параметр идентификатора SID для создания пользователей в нескольких базах данных с одинаковыми идентификаторами SID. Это удобно при создании пользователей в нескольких базах данных для подготовки обработки отказа AlwaysOn. Чтобы определить идентификатор SID пользователя, выполните запрос sys.database_principals.
В базе данных SQL в Microsoft Fabric sid
должен быть допустимым идентификатором указанного субъекта Microsoft Entra. Если субъект является пользователем или группой, идентификатор должен быть идентификатором объекта Microsoft Entra пользователя или группы. Если субъект Microsoft Entra является субъектом-службой (приложением или управляемым удостоверением), идентификатор должен быть идентификатором приложения (или идентификатором клиента). Указанный идентификатор должен быть значением binary(16)
. Ядро СУБД не проверяет указанный идентификатор в Microsoft Entra. SID
Спорить необходимо использовать вместе с TYPE
.
TYPE = [ E | X ]
Область применения: база данных SQL в Microsoft Fabric.
Указывает тип субъекта Microsoft Entra. E
указывает, что субъект является пользователем или субъектом-службой (приложением или управляемым удостоверением). X
указывает, что субъект является группой.
ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ]
Область применения: SQL Server 2016 (13.x) и более поздних версий База данных SQL.
Отключает проверки шифрованных метаданных на сервере в операциях массового копирования. Это позволяет пользователю массово копировать зашифрованные данные между таблицами или базами данных без расшифровки данных. Значение по умолчанию — OFF.
Предупреждение
Неправильное использование этого параметра может привести к повреждению данных. Дополнительные сведения см. в разделе Перенос конфиденциальных данных с помощью функции Always Encrypted.
FROM EXTERNAL PROVIDER
Область применения: База данных SQL, Управляемый экземпляр SQL Azure, база данных SQL в Microsoft Fabric
Указывает, что субъект предназначен для проверки подлинности Microsoft Entra. SQL Server автоматически проверяет предоставленное имя субъекта в Microsoft Entra.
Если субъект, выдавающий инструкцию CREATE USER
, является субъектом-пользователем Microsoft Entra, субъект (или группа субъекта) должен находиться в роли читателей каталогов в Microsoft Entra.
В База данных SQL и Управляемый экземпляр SQL Azure, если субъект, выдавающий CREATE USER
инструкцию, является субъектом-службой, удостоверение сервера базы данных или управляемого экземпляра должно находиться в роли читателей каталогов в Microsoft Entra.
В базе данных SQL в Microsoft Fabric не допускается, FROM EXTERNAL PROVIDER
если субъект, выдавающий CREATE USER
, является субъектом-службой в Microsoft Entra. Субъекты-службы должны использовать и SID
арифменты TYPE
для создания пользователей для субъектов Microsoft Entra.
WITH OBJECT_ID = objectid
Область применения: База данных SQL, Управляемый экземпляр SQL Azure, база данных SQL в Microsoft Fabric
Указывает идентификатор объекта Microsoft Entra. OBJECT_ID
Если задано, user_name может быть пользовательским псевдонимом, сформированным из исходного отображаемого имени субъекта с добавлением суффикса. User_name должно быть уникальным именем в sys.database_principals
представлении и соответствовать всем другим sysname
ограничениям. Дополнительные сведения об использовании WITH OBJECT_ID
параметра см. в разделе "Имена входа Microsoft Entra" и пользователей с неуникными отображаемыми именами.
Примечание.
Если отображаемое имя субъекта-службы не является дубликатом, следует использовать значение по умолчанию или CREATE USER
инструкцииCREATE LOGIN
. Расширение WITH OBJECT_ID
— это элемент устранения неполадок, реализованный для использования с неуникными субъектами-службами. Использование его с уникальным субъектом-службой не рекомендуется. WITH OBJECT_ID
Использование расширения для субъекта-службы без добавления суффикса будет выполнено успешно, но не будет очевидно, какой субъект-служба создан для входа или пользователя. Рекомендуется создать псевдоним с помощью суффикса для уникальной идентификации субъекта-службы. Расширение WITH OBJECT_ID
не поддерживается для SQL Server.
Замечания
Если 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 можно, предоставив ему разрешение CONNECT, как показано далее:
GRANT CONNECT TO guest;
GO
Данные о пользователях базы данных отображаются в представлении каталога sys.database_principals.
Используйте расширение FROM EXTERNAL PROVIDER
синтаксиса для создания имен входа Microsoft Entra на уровне сервера в База данных SQL Azure и Управляемый экземпляр SQL Azure. Имена входа Microsoft Entra позволяют субъектам Microsoft Entra уровня базы данных сопоставляться с именами входа Microsoft Entra на уровне сервера. Чтобы создать пользователя Microsoft Entra из имени входа Microsoft Entra, используйте следующий синтаксис:
CREATE USER [Microsoft_Entra_principal] FROM LOGIN [Microsoft Entra login];
При создании пользователя в базе данных SQL Azure login_name должна соответствовать существующему имени входа Microsoft Entra или в противном случае с помощью предложения FROM EXTERNAL PROVIDER будет создан только пользователь Microsoft Entra без входа в master
базу данных. Например, следующая команда создает автономного пользователя:
CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER;
Сводка синтаксиса
Пользователи на основе имен входа в 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. Параметры схемы и языковые параметры, задаваемые по умолчанию, не приведены в списке.
Внимание
Этот синтаксис предоставляет пользователям доступ к базе данных, а также предоставляет новый доступ к ядро СУБД.
CREATE USER [Domain1\WindowsUserBarry]
CREATE USER [Domain1\WindowsGroupManagers]
CREATE USER Barry WITH PASSWORD = 'sdjklalie8rew8337!$d'
Пользователи на основе субъектов Windows без входа в системную master
базу данных
В следующем списке показан возможный синтаксис для пользователей, имеющих доступ к ядро СУБД через группу Windows, но у них нет входа в master
системную базу данных. Такой синтаксис можно использовать во всех типах базы данных. Параметры схемы и языковые параметры, задаваемые по умолчанию, не приведены в списке.
Этот синтаксис аналогичен пользователям на основе имен входа, master
но эта категория пользователя не имеет входа master
. Пользователь должен иметь доступ к ядро СУБД через имя входа в группу Windows.
Этот синтаксис аналогичен тому который используется для пользователей автономной базы данных, соответствующих субъектам Windows, однако пользователи этой категории не получают новый доступ к ядру СУБД.
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
Безопасность
При создании пользователя предоставляется доступ к базе данных, но доступ к объектам в базе данных не предоставляется автоматически. После создания пользователи обычно добавляются в роли базы данных, которые имеют разрешение на доступ к объектам базы данных, либо разрешения на объект предоставляются непосредственно пользователю. Сведения о проектировании системы разрешений см. в статье Getting Started with Database Engine Permissions.
Замечания, относящиеся к автономным базам данных
При подключении к автономной базе данных, если у пользователя нет имени входа в master
базу данных, строка подключения должна включать в себя имя автономной базы данных в качестве начального каталога. Параметр исходного каталога всегда обязателен для пользователя автономной базы данных с паролем.
В автономной базе данных создание пользователей помогает отделять базу данных от экземпляра ядро СУБД, чтобы базу данных можно было легко переместить в другой экземпляр SQL Server. Дополнительные сведения см. в разделах Автономные базы данных и Пользователи автономной базы данных — создание переносимой базы данных. Сведения об изменении пользователя базы данных с пользователя, имеющего имя для входа для проверки подлинности SQL Server, на пользователя автономной базы данных с паролем, см. в разделе sp_migrate_user_to_contained (Transact-SQL).
В автономной базе данных пользователи не должны иметь входа в master
базу данных. ядро СУБД администраторы должны понимать, что доступ к автономной базе данных можно предоставить на уровне базы данных вместо уровня ядро СУБД. Дополнительные сведения см. в разделе Security Best Practices with Contained Databases.
При использовании пользователей автономной базы данных на База данных SQL Azure настройте доступ с помощью правила брандмауэра уровня базы данных вместо правила брандмауэра на уровне сервера. Дополнительные сведения см. в разделе sp_set_database_firewall_rule (база данных SQL Azure).
Для SQL Server 2022 (16.x), База данных SQL, Управляемый экземпляр SQL Azure и Azure Synapse Analytics содержатся пользователи базы данных, SSMS поддерживает многофакторную проверку подлинности. Дополнительные сведения см. в разделе "Использование многофакторной проверки подлинности Microsoft Entra".
Разрешения
Необходимо разрешение ALTER ANY USER для базы данных.
Разрешения для SQL Server 2022 и более поздних версий
Требуется разрешение CREATE USER в базе данных.
Примеры
А. Создание пользователя базы данных, соответствующего имени входа SQL Server
В следующем примере сначала создается имя AbolrousHazem
входа SQL Server, а затем создается соответствующий пользователь AbolrousHazem
AdventureWorks2022
базы данных.
CREATE LOGIN AbolrousHazem
WITH PASSWORD = '340$Uuxwp7Mcxo7Khy';
Изменение на пользовательскую базу данных. Например, в SQL Server используйте инструкцию USE AdventureWorks2022
. В Azure Synapse Analytics и analytics Platform System (PDW) необходимо создать новое подключение к пользовательской базе данных.
CREATE USER AbolrousHazem FOR LOGIN AbolrousHazem;
GO
B. Создание пользователя базы данных со схемой по умолчанию
В следующем примере вначале создается имя входа WanidaBenshoof
с паролем на сервер, а затем в базе данных создается соответствующий пользователь Wanida
со схемой по умолчанию Marketing
.
CREATE LOGIN WanidaBenshoof
WITH PASSWORD = '8fdKJl3$nlNv3049jsKK';
USE AdventureWorks2022;
CREATE USER Wanida FOR LOGIN WanidaBenshoof
WITH DEFAULT_SCHEMA = Marketing;
GO
В. Создание пользователя базы данных из сертификата
В следующем примере в базе данных создается пользователь JinghaoLiu
из сертификата CarnationProduction50
.
Применимо: SQL Server 2008 (10.0.x) и более поздних версий.
USE AdventureWorks2022;
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 AdventureWorks2022;
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 (11.x) и более поздних версий. Этот пример работает в База данных SQL, если DEFAULT_LANGUAGE удалены.
USE AdventureWorks2022;
GO
CREATE USER Carlo
WITH PASSWORD='RN92piTCh%$!~3K9844 Bl*'
, DEFAULT_LANGUAGE=[Brazilian]
, DEFAULT_SCHEMA=[dbo]
GO
F. Создание пользователя автономной базы данных для имени входа домена
В следующем примере создается пользователь автономной базы данных для имени входа Fritz в домене Contoso. Этот пример можно выполнить только в автономной базе данных.
Область применения: SQL Server 2012 (11.x) и более поздних версий.
USE AdventureWorks2022;
GO
CREATE USER [Contoso\Fritz] ;
GO
G. Создание пользователя автономной базы данных с конкретным идентификатором SID
В следующем примере создается пользователь автономной базы данных с проверкой подлинности SQL Server, имя пользователя — CarmenW. Этот пример можно выполнить только в автономной базе данных.
Область применения: SQL Server 2012 (11.x) и более поздних версий.
USE AdventureWorks2022;
GO
CREATE USER CarmenW WITH PASSWORD = 'a8ea v*(Rd##+'
, SID = 0x01050000000000090300000063FF0451A9E7664BA705B10E37DDC4B7;
H. Создание пользователя для копирования зашифрованных данных
В следующем примере создается пользователь, который может копировать данные, защищенные компонентом Always Encrypted, из одного набора таблиц с зашифрованными столбцами, в другой набор таблиц с зашифрованными столбцами (в той же или другой базе данных). Дополнительные сведения см. в разделе Перенос конфиденциальных данных с помощью функции Always Encrypted.
Область применения: SQL Server 2016 (13.x) и более поздних версий База данных SQL.
CREATE USER [Chin]
WITH
DEFAULT_SCHEMA = dbo
, ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = ON ;
I. Создание пользователя Microsoft Entra из имени входа Microsoft Entra в SQL Azure
Чтобы создать пользователя Microsoft Entra из имени входа Microsoft Entra, используйте следующий синтаксис.
Войдите на логический сервер в Azure или Управляемый экземпляр SQL с помощью имени входа Microsoft Entra, предоставив sysadmin
роль в Управляемый экземпляр SQL или loginmanager
роли в База данных SQL. Следующий скрипт T-SQL создает пользователя bob@contoso.com
Microsoft Entra из имени входа bob@contoso.com
. Это имя входа было создано в примере CREATE LOGIN.
CREATE USER [bob@contoso.com] FROM LOGIN [bob@contoso.com];
GO
Внимание
При создании пользователя из имени входа Microsoft Entra укажите user_name так же, как и login_name из login.
Создание пользователя Microsoft Entra в качестве группы из имени входа Microsoft Entra, которое является группой, поддерживается.
CREATE USER [MS Entra group] FROM LOGIN [MS Entra group];
GO
Вы также можете создать пользователя Microsoft Entra из имени входа Microsoft Entra, который является группой.
CREATE USER [bob@contoso.com] FROM LOGIN [MS Entra group];
GO
J. Создание пользователя автономной базы данных из субъекта Microsoft Entra
Следующий синтаксис создает пользователя bob@contoso.com
Microsoft Entra в базе данных без связанного имени входа master
. Ядро СУБД проверяет, существует ли указанный пользователь в Microsoft Entra.
CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER;
GO
K. Создание пользователя автономной базы данных из субъекта Microsoft Entra без проверки
Область применения: база данных SQL в Microsoft Fabric
Примеры, приведенные в этом разделе, создают пользователей базы данных для субъектов Microsoft Entra, не проверяя имена субъектов в Microsoft Entra.
В следующем примере T-SQL создается пользователь базы данных для пользователя Microsoft Entra с именем bob@contoso.com
. Замените <unique identifier sid>
идентификатор идентификатором безопасности нового пользователя на идентификатор объекта пользователя Microsoft Entra.
DECLARE @principal_name SYSNAME = 'bob@contoso.com';
DECLARE @objectId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- user's object ID in Microsoft Entra
-- Convert the guid to the right type
DECLARE @castObjectId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @objectId), 1);
-- Construct command: CREATE USER [@principal_name] WITH SID = @castObjectId, TYPE = E;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castObjectId + ', TYPE = E;'
EXEC (@cmd);
В следующем примере создается пользователь базы данных для субъекта-службы Microsoft Entra с именем HRApp
. Замените <unique identifier sid>
идентификатор идентификатором безопасности нового пользователя на идентификатор клиента субъекта-службы в Microsoft Entra.
DECLARE @principal_name SYSNAME = 'HRApp';
DECLARE @clientId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- principal's client ID in Microsoft Entra
-- Convert the guid to the right type
DECLARE @castClientId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @clientId), 1);
-- Construct command: CREATE USER [@principal_name] WITH SID = @castClientId, TYPE = E;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castClientId + ', TYPE = E;'
EXEC (@cmd);
В следующем примере создается пользователь базы данных для группы Microsoft Entra с именем HR
. Замените <unique identifier sid>
идентификатор идентификатором безопасности нового пользователя на идентификатор объекта группы.
DECLARE @group_name SYSNAME = 'HR';
DECLARE @objectId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- principal's object ID in Microsoft Entra
-- Convert the guid to the right type
DECLARE @castObjectId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @objectId), 1);
-- Construct command: CREATE USER [@groupName] WITH SID = @castObjectId, TYPE = X;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castObjectId + ', TYPE = X;'
EXEC (@cmd);
Следующие шаги
После создания пользователя вы можете добавить пользователя к роли базы данных с помощью инструкции ALTER ROLE.
Используйте GRANT для предоставления роли разрешений на объект, чтобы она имела доступ к таблицам. Общие сведения о модели безопасности SQL Server см. в разделе Разрешения.
Связанный контент
- Создание пользователя базы данных
- sys.database_principals (Transact-SQL)
- ALTER USER (Transact-SQL)
- DROP USER (Transact-SQL)
- CREATE LOGIN (Transact-SQL)
- EVENTDATA (Transact-SQL)
- Автономные базы данных
- Подключение к База данных SQL с помощью проверки подлинности Microsoft Entra
- Приступая к работе с разрешениями Database Engine