CREATE COLUMN MASTER KEY (Transact-SQL)

Применимо к: SQL Server 2016 (13.x) и более поздних версий Azure SQL Database Управляемый экземпляр SQL Azure

Создает объект метаданных главного ключа столбца в базе данных. Элемент метаданных главного ключа столбца представляет ключ, хранящийся во внешнем хранилище ключей. Ключ защищает (шифрует) ключи шифрования столбцов, когда вы используете Always Encrypted или Always Encrypted с безопасными анклавами. Использование нескольких главных ключей столбца позволяет регулярно сменять их для повышения безопасности. Создайте главный ключ столбца в хранилище ключей и связанный с ним объект метаданных в базе данных с помощью обозревателя объектов в SQL Server Management Studio или с помощью PowerShell. Подробные сведения см. в статье Общие сведения об управлении ключами для постоянного шифрования.

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

Важно!

Для создания ключей с поддержкой анклава (с вычислениями ENCLAVE_COMPUTATIONS) требуется шифрование Always Encrypted с безопасными анклавами.

Синтаксис

CREATE COLUMN MASTER KEY key_name   
    WITH (  
        KEY_STORE_PROVIDER_NAME = 'key_store_provider_name',  
        KEY_PATH = 'key_path'   
        [,ENCLAVE_COMPUTATIONS (SIGNATURE = signature)]
         )   
[;]  

Аргументы

key_name
Имя главного ключа столбца в базе данных.

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

Драйвер клиента с поддержкой Always Encrypted выполняет следующие действия:

  • принимает имя поставщика хранилища ключей;
  • ищет нужный поставщик хранилища ключей в своем реестре поставщиков хранилищ ключей;

затем он применяет поставщик для расшифровки ключей шифрования столбцов. Ключи шифрования столбцов шифруются главным ключом столбца. Главный ключ столбца хранится в базовом хранилище ключей. Затем значение ключа шифрования столбца в виде открытого текста используется для шифрования параметров запроса, соответствующих зашифрованным столбцам базы данных. Он также нужен для расшифровки результатов запроса из зашифрованных столбцов.

Библиотеки драйвера клиента с поддержкой Always Encrypted включают в себя поставщики хранилища ключей для распространенных хранилищ ключей.

Набор доступных поставщиков зависит от типа и версии драйвера клиента. Сведения о конкретных драйверах см. в документации по Always Encrypted: Разработка приложений с помощью Always Encrypted.

В следующей таблице показаны имена системных поставщиков.

Имя поставщика хранилища ключей Базовое хранилище ключей
'MSSQL_CERTIFICATE_STORE' Хранилище сертификатов Windows
'MSSQL_CSP_PROVIDER' Хранилище, например аппаратный модуль безопасности (HSM), которое поддерживает интерфейс Microsoft CryptoAPI.
'MSSQL_CNG_STORE' Хранилище, например аппаратный модуль безопасности (HSM), которое поддерживает интерфейс API криптографии следующего поколения.
AZURE_KEY_VAULT См. статью Приступая к работе с хранилищем ключей Azure.
MSSQL_JAVA_KEYSTORE Хранилище ключей Java.}

Вы можете настроить пользовательский поставщик хранилища ключей в драйвере клиента Always Encrypted, чтобы хранить главные ключи столбцов, для которых нет встроенного поставщика хранилища ключей. Обратите внимание на то, что имена пользовательских поставщиков хранилища ключей не могут начинаться с префикса MSSQL_, так как он зарезервирован для поставщиков хранилищ ключей Microsoft.

key_path
Путь к ключу в хранилище главных ключей столбцов. Путь к ключу должен быть допустимым для каждого клиентского приложения, которое будет шифровать или расшифровывать данные. Данные хранятся в столбце, который (косвенно) защищен главным ключом столбца. Клиентскому приложению нужен доступ к этому ключу. Формат пути к ключу зависит от поставщика хранилища ключей. Ниже представлен список форматов путей к ключам для системных поставщиков хранилища ключей Майкрософт.

  • Имя поставщика: MSSQL_CERTIFICATE_STORE

    Формат пути к ключу:ИмяХранилищаСертификатов/РасположениеХранилищаСертификатов/ОтпечатокСертификата

    Где:

    РасположениеХранилищаСертификатов
    Расположение хранилища сертификатов: текущий пользователь или локальный компьютер. Дополнительные сведения см. в статье Хранилища сертификатов "Локальный компьютер" и "Текущий пользователь".

    ИмяХранилищаСертификатов
    Имя хранилища сертификатов, например My.

    ОтпечатокСертификата
    Отпечаток сертификата.

    Примеры:

    N'CurrentUser/My/BBF037EC4A133ADCA89FFAEC16CA5BFA8878FB94'  
    
    N'LocalMachine/My/CA5BFA8878FB94BBF037EC4A133ADCA89FFAEC16'  
    
  • Имя поставщика: MSSQL_CSP_PROVIDER

    Формат пути к ключу:ИмяПоставщика/ИдентификаторКлюча

    Где:

    ProviderName
    Имя поставщика службы шифрования (CSP) с поддержкой CAPI, который предоставляет хранилище главных ключей столбцов. Если в качестве хранилища ключей используется модуль HSM, здесь следует указать имя поставщика службы шифрования, предоставляемого поставщиком модуля HSM. Поставщик должен быть установлен на клиентском компьютере.

    ИдентификаторКлюча
    Идентификатор ключа, используемого в качестве главного ключа столбца, в хранилище ключей.

    Примеры:

    N'My HSM CSP Provider/AlwaysEncryptedKey1'  
    
  • Имя поставщика: MSSQL_CNG_STORE

    Формат пути к ключу:ИмяПоставщика/ИдентификаторКлюча

    Где:

    ProviderName
    Имя поставщика хранилища ключей (KSP), реализующего интерфейс API криптографии следующего поколения (CNG), для хранилища главных ключей столбцов. Если в качестве хранилища ключей используется модуль HSM, здесь следует указать имя поставщика хранилища ключей, предоставляемого изготовителем модуля HSM. Поставщик должен быть установлен на клиентском компьютере.

    ИдентификаторКлюча
    Идентификатор ключа, используемого в качестве главного ключа столбца, в хранилище ключей.

    Примеры:

    N'My HSM CNG Provider/AlwaysEncryptedKey1'  
    
  • Имя поставщика: AZURE_KEY_STORE

    Формат пути к ключу:KeyUrl

    Где:

    KeyUrl
    URL-адрес ключа в Azure Key Vault.

ENCLAVE_COMPUTATIONS
Указывает, что главный ключ столбца поддерживает анклав. Все ключи шифрования столбцов, зашифрованные с помощью главного ключа столбца, можно предоставить в совместный доступ для безопасного анклава на стороне сервера и использовать их для вычислений внутри анклава. Дополнительные сведения см. в статье Always Encrypted с безопасными анклавами.

подпись
Двоичный литерал, полученный путем подписывания пути к ключу и значения параметра ENCLAVE_COMPUTATIONS главным ключом столбца. Эта подпись отражает, включен ли параметр ENCLAVE_COMPUTATIONS. Подпись защищает подписанные значения от изменений неавторизованными пользователями. Драйвер клиента с включенной поддержкой шифрования Always Encrypted проверяет подпись и возвращает ошибку в приложение, если подпись недопустима. Подпись должна быть создана с помощью средств на стороне клиента. Дополнительные сведения см. в статье Always Encrypted с безопасными анклавами.

Комментарии

Элемент метаданных главного ключа столбца следует создать, прежде чем создавать элемент метаданных ключа шифрования столбца в базе данных и применять Always Encrypted для шифрования столбцов в базе данных. Элемент главного ключа столбца в метаданных не содержит фактического значения главного ключа столбца. Главный ключ столбца должен храниться во внешнем хранилище ключей столбца (за пределами SQL Server). Имя поставщика хранилища ключей и путь к главному ключу столбца в метаданных должны быть допустимыми для клиентского приложения. Клиентскому приложению следует использовать главный ключ столбца для расшифровки ключа шифрования столбца. Ключ шифрования столбца шифруется с помощью главного ключа столбца. Клиентскому приложению также нужно выполнять запросы по зашифрованным столбцам.

Для управления главным ключами столбцов рекомендуется использовать такие средства, как SQL Server Management Studio (SSMS) или PowerShell. Такие средства создают подписи (если используется Always Encrypted с безопасными анклавами) и автоматически выдают инструкции CREATE COLUMN MASTER KEY для создания объектов метаданных ключа шифрования столбцов. См. разделы Подготовка ключей Always Encrypted с помощью SQL Server Management Studio и Подготовка ключей Always Encrypted с помощью PowerShell.

Разрешения

Необходимо разрешение ALTER ANY COLUMN MASTER KEY.

Примеры

A. Создание главного ключа столбца

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

CREATE COLUMN MASTER KEY MyCMK  
WITH (  
     KEY_STORE_PROVIDER_NAME = N'MSSQL_CERTIFICATE_STORE',   
     KEY_PATH = 'Current User/Personal/f2260f28d909d21c642a3d8e0b45a830e79a1420'  
   );  

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

CREATE COLUMN MASTER KEY MyCMK  
WITH (  
    KEY_STORE_PROVIDER_NAME = N'MSSQL_CNG_STORE',    
    KEY_PATH = N'My HSM CNG Provider/AlwaysEncryptedKey'  
);  

Создайте элемент метаданных главного ключа столбца для главного ключа столбца. Главный ключ столбца сохраняется в Azure Key Vault, чтобы предоставить доступ к нему клиентским приложениям, которые используют поставщик AZURE_KEY_VAULT.

CREATE COLUMN MASTER KEY MyCMK  
WITH (  
    KEY_STORE_PROVIDER_NAME = N'AZURE_KEY_VAULT',  
    KEY_PATH = N'https://myvault.vault.azure.net:443/keys/  
        MyCMK/4c05f1a41b12488f9cba2ea964b6a700');  

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

CREATE COLUMN MASTER KEY MyCMK  
WITH (  
    KEY_STORE_PROVIDER_NAME = 'CUSTOM_KEY_STORE',    
    KEY_PATH = 'https://contoso.vault/sales_db_tce_key'  
);  

Б. Создание главного ключа столбца с поддержкой анклава

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

CREATE COLUMN MASTER KEY MyCMK  
WITH (  
     KEY_STORE_PROVIDER_NAME = N'MSSQL_CERTIFICATE_STORE',   
     KEY_PATH = 'Current User/Personal/f2260f28d909d21c642a3d8e0b45a830e79a1420'  
     ENCLAVE_COMPUTATIONS (SIGNATURE = 0xA80F5B123F5E092FFBD6014FC2226D792746468C901D9404938E9F5A0972F38DADBC9FCBA94D9E740F3339754991B6CE26543DEB0D094D8A2FFE8B43F0C7061A1FFF65E30FDDF39A1B954F5BA206AAC3260B0657232020542419990261D878318CC38EF4E853970ED69A8D4A306693B8659AAC1C4E4109DE5EB148FD0E1FDBBC32F002C1D8199D313227AD689279D8DEEF91064DF122C19C3767C463723AB663A6F8412AE17E745922C0E3A257EAEF215532588ACCBD440A03C7BC100A38BD0609A119E1EF7C5C6F1B086C68AB8873DBC6487B270340E868F9203661AFF0492CEC436ABF7C4713CE64E38CF66C794B55636BFA55E5B6554AF570CF73F1BE1DBD)
  );  

Создайте элемент метаданных главного ключа столбца для главного ключа столбца с поддержкой анклава. Главный ключ столбца с поддержкой анклава сохраняется в Azure Key Vault, чтобы предоставить доступ к нему клиентским приложениям, которые используют поставщик AZURE_KEY_VAULT.

CREATE COLUMN MASTER KEY MyCMK
WITH (
	KEY_STORE_PROVIDER_NAME = N'AZURE_KEY_VAULT',
	KEY_PATH = N'https://myvault.vault.azure.net:443/keys/MyCMK/4c05f1a41b12488f9cba2ea964b6a700',
	ENCLAVE_COMPUTATIONS(SIGNATURE = 0xA80F5B123F5E092FFBD6014FC2226D792746468C901D9404938E9F5A0972F38DADBC9FCBA94D9E740F3339754991B6CE26543DEB0D094D8A2FFE8B43F0C7061A1FFF65E30FDDF39A1B954F5BA206AAC3260B0657232020582413990261D878318CC38EF4E853970ED69A8D4A306693B8659AAC1C4E4109DE5EB148FD0E1FDBBC32F002C1D8199D313227AD689279D8DEEF91064DF122C19C3767C463723AB663A6F8412AE17E745922C0E3A257EAEF215532588ACCBD440A03C7BC100A38BD0609A119E1EF7C5C6F1B086C68AB8873DBC6487B270340E868F9203661AFF0492CEC436ABF7C4713CE64E38CF66C794B55636BFA55E5B6554AF570CF73F1BE1DBD)
);

См. также