CREATE CREDENTIAL (Transact-SQL)

Применимо к:SQL Server Управляемый экземпляр SQL Azure

Создает учетные данные на уровне сервера. Учетные данные являются записью, которая содержит сведения для проверки подлинности, необходимые для подключения к ресурсу извне SQL Server. Большинство учетных данных включают имя пользователя и пароль Windows. Например, при сохранении резервной копии базы данных в определенном расположении серверу SQL Server может потребоваться предоставить специальные учетные данные для доступа к этому расположению. Дополнительные сведения см. в статье Учетные данные (компонент Database Engine).

Примечание.

Чтобы создать учетные данные на уровне базы данных, используйте инструкцию CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL). Создайте учетные данные на уровне сервера, если CREATE CREDENTIAL необходимо использовать одни и те же учетные данные для нескольких баз данных на сервере.

  • Создайте учетные данные область базы данных, CREATE DATABASE SCOPED CREDENTIAL чтобы сделать базу данных более переносимой. При переносе базы данных на новый сервер учетные данные на уровне базе данных переносятся вместе с ней.
  • Используйте учетные данные уровня базы данных в базе данных SQL.
  • Используйте область учетные данные базы данных с помощью PolyBase и функций виртуализации данных Управляемый экземпляр SQL Azure.

Соглашения о синтаксисе Transact-SQL

Синтаксис

CREATE CREDENTIAL credential_name
WITH IDENTITY = 'identity_name'
    [ , SECRET = 'secret' ]
        [ FOR CRYPTOGRAPHIC PROVIDER cryptographic_provider_name ]

Примечание.

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

credential_name

Указывает имя создаваемых учетных данных. Аргумент credential_name не может начинаться с символа номера (#). Системные учетные данные начинаются с символов ##.

Важно!

При использовании подписанного URL-адреса (SAS) это имя должно соответствовать пути к контейнеру, начинаться с префикса https и не должно содержать косой черты. См. пример Г.

При использовании для резервного копирования и восстановления с помощью внешних платформ данных, таких как платформы, совместимые с Хранилище BLOB-объектов Azure или S3, в следующей таблице приведены общие пути:

Внешний источник данных Путь к расположению Пример
Хранилище BLOB-объектов Azure (версия 2) https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername> Пример D.
S3-совместимое хранилище объектов — хранилище, совместимое с S3: s3://<server_name>:<port>/
— AWS S3: s3://<bucket_name>.S3.<region>.amazonaws.com[:port]/<folder>
или s3://s3.<region>.amazonaws.com[:port]/<bucket_name>/<folder>
Пример F.

IDENTITY ='identity_name'

Указывает имя учетной записи для использования при подключении за пределами сервера. При использовании учетных данных для доступа к хранилищу Azure Key Vault IDENTITY — это имя хранилища ключей. См. пример В далее. Если в учетных данных используется подписанный URL-адрес (SAS), IDENTITY имеет значение SHARED ACCESS SIGNATURE. См. пример Г ниже.

Важно!

База данных SQL Azure поддерживает только удостоверения Azure Key Vault и удостоверения на основе подписанного URL-адреса. Удостоверения пользователей Windows не поддерживаются.

SECRET ='secret'

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

Когда учетные данные используются для доступа к Azure Key Vault, аргумент SECRET должен быть отформатирован как идентификатор> клиента субъекта-службы <(без дефисов) и< секрет>, передаваемый вместе без пробела между ними. См. пример В далее. Если в учетных данных используется подписанный URL-адрес, SECRET — это токен подписанного URL-адреса. См. пример Г ниже. Сведения о создании хранимой политики доступа и подписанного URL-адреса в контейнере Azure см. в разделе Занятие 1. Создание хранимой политики доступа и подписанного URL-адреса для контейнера Azure.

FOR CRYPTOGRAPHIC PROVIDER cryptographic_provider_name

Указывает имя, на которое ссылается поставщик расширенного управления ключами (EKM). Дополнительные сведения о службе управления ключами см. в разделе Расширенное управление ключами (EKM).

Замечания

Если IDENTITY является пользователем Windows, секретный код может быть паролем. Секретный код шифруется главным ключом службы. Если главный ключ службы формируется повторно, секретный код повторно шифруется, используя новый главный ключ службы.

После создания учетных данных можно сопоставить их с учетными данными для входа в SQL Server, используя параметр CREATE LOGIN или ALTER LOGIN. Учетные данные для входа в SQL Server можно сопоставить только с одними учетными данными, но одни учетные данные можно сопоставить с несколькими учетными данными для входа в SQL Server. Дополнительные сведения см. в статье Учетные данные (компонент Database Engine). Учетные данные уровня сервера можно сопоставить только с именем для входа, но не с пользователем базы данных.

Сведения об учетных данных отображаются в представлении каталога sys.credentials.

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

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

Разрешения

Требуется разрешение ALTER ANY CREDENTIAL.

Примеры

А. Создание учетных данных для удостоверения Windows

Следующий пример создает учетные данные с именем AlterEgo. В эти учетные данные входят имя пользователя Windows Mary5 и пароль.

CREATE CREDENTIAL AlterEgo WITH IDENTITY = 'Mary5',
    SECRET = '<EnterStrongPasswordHere>';
GO

B. Создание учетных данных для расширенного управления ключами

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

CREATE CREDENTIAL CredentialForEKM
    WITH IDENTITY='User1OnEKM', SECRET='<EnterStrongPasswordHere>'
    FOR CRYPTOGRAPHIC PROVIDER MyEKMProvider;
GO

/* Modify the login to assign the cryptographic provider credential */
ALTER LOGIN User1
ADD CREDENTIAL CredentialForEKM;

C. Создание учетных данных для расширенного управления ключами с помощью хранилища ключей Azure

В приведенном ниже примере создаются учетные данные SQL Server, которые используются ядром СУБД для доступа к хранилищу Azure Key Vault с помощью Соединителя SQL Server для Microsoft Azure Key Vault. Целиком пример использования Соединителя SQL Server см. в разделе Расширенное управление ключами с помощью Azure Key Vault (SQL Server).

Важно!

В аргументе IDENTITYCREATE CREDENTIAL необходимо указать имя хранилища ключей. Аргумент SECRET параметра CREATE CREDENTIAL необходимо одновременно передать <Идентификатор клиента> (без дефисов) и <Секрет>, не разделенные пробелом.

В следующем примере из идентификатора клиента (EF5C8E09-4D2A-4A76-9998-D93440D8115D) удаляются дефисы. Идентификатор клиента вводится как строка EF5C8E094D2A4A769998D93440D8115D , а секрет представляется строкой SECRET_DBEngine.

USE master;
CREATE CREDENTIAL Azure_EKM_TDE_cred
    WITH IDENTITY = 'ContosoKeyVault',
    SECRET = 'EF5C8E094D2A4A769998D93440D8115DSECRET_DBEngine'
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;

В приведенном ниже примере создаются те же учетные данные с использованием переменных для строк Идентификатор клиента и Секрет, которые затем сцепляются для получения аргумента SECRET. Функция REPLACE используется для удаления дефисов из идентификатора клиента.

DECLARE @AuthClientId uniqueidentifier = 'EF5C8E09-4D2A-4A76-9998-D93440D8115D';
DECLARE @AuthClientSecret varchar(200) = 'SECRET_DBEngine';
DECLARE @pwd varchar(max) = REPLACE(CONVERT(varchar(36), @AuthClientId) , '-', '') + @AuthClientSecret;

EXEC ('CREATE CREDENTIAL Azure_EKM_TDE_cred
    WITH IDENTITY = ''ContosoKeyVault'', SECRET = ''' + @PWD + '''
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;');

D. Создание учетных данных с помощью маркера SAS

Применятся к: SQL Server 2014 (12.x) до текущей версии и управляемый экземпляр SQL Azure.

В приведенном ниже примере создаются учетные данные с подписанным URL-адресом с использованием токена SAS. Руководство по созданию хранимой политики доступа и подписанного URL-адреса в контейнере Azure, а затем созданию учетных данных с помощью подписанного URL-адреса см. в руководстве по использованию Microsoft Хранилище BLOB-объектов Azure с базами данных SQL Server.

Важно!

Аргумент CREDENTIAL NAME требует, чтобы имя соответствовало пути к контейнеру, начиналось с префикса https и не содержало завершающей косой черты. Для аргумента IDENTITY требуется имя SHARED ACCESS SIGNATURE. Для аргумента SECRET требуется токен подписанного URL-адреса.

В начале секрета SHARED ACCESS SIGNATURE не должно быть символа ?.

USE master
CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>] -- this name must match the container path, start with https and must not contain a trailing forward slash.
    WITH IDENTITY='SHARED ACCESS SIGNATURE' -- this is a mandatory string and do not change it.
    , SECRET = 'sharedaccesssignature' -- this is the shared access signature token
GO

Е. Создание учетных данных для управляемого удостоверения

В приведенном ниже примере создаются учетные данные, представляющие управляемое удостоверение службы SQL Azure или Azure Synapse. В этом случае пароль и секрет не применяются.

CREATE CREDENTIAL ServiceIdentity WITH IDENTITY = 'Managed Identity';
GO

F. Создание учетных данных для резервного копирования и восстановления в хранилище, совместимое с S3

Область применения: SQL Server 2022 (16.x) и более поздних версий

Открытый стандарт, совместимый с S3, предоставляет пути к хранилищу и сведения, которые могут отличаться на основе платформы хранения. Дополнительные сведения см. в разделе Резервное копирование SQL Server на URL-адрес совместимого с S3 хранилища объектов.

В большинстве хранилищ, совместимых с S3, в этом примере создается учетные данные уровня сервера и выполняется.BACKUP TO URL

USE [master];
CREATE CREDENTIAL [s3://<endpoint>:<port>/<bucket>]
WITH
        IDENTITY    = 'S3 Access Key',
        SECRET      = '<AccessKeyID>:<SecretKeyID>';
GO

BACKUP DATABASE [SQLTestDB]
TO      URL = 's3://<endpoint>:<port>/<bucket>/SQLTestDB.bak'
WITH    FORMAT /* overwrite any existing backup sets */
,       STATS = 10
,       COMPRESSION;

Однако AWS S3 поддерживает два разных стандарта URL-адреса.

  • S3://<BUCKET_NAME>.S3.<REGION>.AMAZONAWS.COM/<FOLDER> (по умолчанию)
  • S3://S3.<REGION>.AMAZONAWS.COM/<BUCKET_NAME>/<FOLDER>

Существует несколько подходов к успешному созданию учетных данных для AWS S3:

  • Укажите имя и путь к контейнеру и регион в имени учетных данных.

    -- S3 bucket name: datavirtualizationsample
    -- S3 bucket region: us-west-2
    -- S3 bucket folder: backup
    
    CREATE CREDENTIAL [s3://datavirtualizationsample.s3.us-west-2.amazonaws.com/backup]
    WITH    
            IDENTITY    = 'S3 Access Key'
    ,       SECRET      = 'accesskey:secretkey';
    GO
    
    BACKUP DATABASE [AdventureWorks2022]
    TO URL  = 's3://datavirtualizationsample.s3.us-west-2.amazonaws.com/backup/AdventureWorks2022.bak'
    WITH COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
    GO
    

    или

    CREATE CREDENTIAL [s3://s3.us-west-2.amazonaws.com/datavirtualizationsample/backup]
    WITH    
            IDENTITY    = 'S3 Access Key'
    ,       SECRET      = 'accesskey:secretkey';
    GO
    
    BACKUP DATABASE [AdventureWorks2022]
    TO URL  = 's3://s3.us-west-2.amazonaws.com/datavirtualizationsample/backup/AdventureWorks2022.bak'
    WITH COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
    GO
    
  • Или укажите имя и путь к контейнеру в имени учетных данных, но параметризуйте регион в каждой BACKUP/RESTORE команде. Используйте строку региона S3 в строке BACKUP_OPTIONS и RESTORE_OPTIONS, например, '{"s3": {"region":"us-west-2"}}'.

    -- S3 bucket name: datavirtualizationsample
    -- S3 bucket region: us-west-2
    -- S3 bucket folder: backup
    
    CREATE CREDENTIAL   [s3://datavirtualizationsample.s3.amazonaws.com/backup]
    WITH    
            IDENTITY    = 'S3 Access Key'
    ,       SECRET      = 'accesskey:secretkey';
    GO
    
    BACKUP DATABASE [AdventureWorks2022]
    TO URL  = 's3://datavirtualizationsample.s3.amazonaws.com/backup/AdventureWorks2022.bak'
    WITH
      BACKUP_OPTIONS = '{"s3": {"region":"us-west-2"}}' -- REGION AS PARAMETER)
    , COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
    GO
    
    RESTORE DATABASE AdventureWorks2022_1 
    FROM URL = 's3://datavirtualizationsample.s3.amazonaws.com/backup/AdventureWorks2022.bak'
    WITH 
      MOVE 'AdventureWorks2022' 
      TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_1.mdf'
    , MOVE 'AdventureWorks2022_log' 
      TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_1.ldf'
    , STATS = 10, RECOVERY
    , REPLACE, RESTORE_OPTIONS = '{"s3": {"region":"us-west-2"}}'; -- REGION AS PARAMETER)
    GO