CREATE COLUMN MASTER KEY (Transact-SQL)CREATE COLUMN MASTER KEY (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server 2016 и более поздних версий даБаза данных SQL Azure нетAzure Synapse Analytics (хранилище данных SQL) нетParallel Data Warehouse APPLIES TO: yesSQL Server 2016 and later yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Создает объект метаданных главного ключа столбца в базе данных.Creates a column master key metadata object in a database. Элемент метаданных главного ключа столбца представляет ключ, хранящийся во внешнем хранилище ключей.A column master key metadata entry represents a key, stored in an external key store. Ключ защищает (шифрует) ключи шифрования столбцов, когда вы используете Always Encrypted или Always Encrypted с безопасными анклавами.The key protects (encrypts) column encryption keys when you're using Always Encrypted or Always Encrypted with secure enclaves. Использование нескольких главных ключей столбца позволяет регулярно сменять их для повышения безопасности.Multiple column master keys allow for periodic key rotation to enhance security. Создайте главный ключ столбца в хранилище ключей и связанный с ним объект метаданных в базе данных с помощью обозревателя объектов в SQL Server Management StudioSQL Server Management Studio или с помощью PowerShell.Create a column master key in a key store and its related metadata object in the database by using the Object Explorer in SQL Server Management StudioSQL Server Management Studio or PowerShell. Подробные сведения см. в статье Общие сведения об управлении ключами для постоянного шифрования.For details, see Overview of Key Management for Always Encrypted.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

Важно!

Для создания ключей с поддержкой анклава (с вычислениями ENCLAVE_COMPUTATIONS) требуется шифрование Always Encrypted с безопасными анклавами.Creating enclave-enabled keys (with ENCLAVE_COMPUTATIONS) requires Always Encrypted with secure enclaves.

СинтаксисSyntax

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

АргументыArguments

key_namekey_name
Имя главного ключа столбца в базе данных.The name of the column master key in the database.

key_store_provider_namekey_store_provider_name
Указывает имя поставщика хранилища ключей.Specifies the name of a key store provider. Поставщиком хранилища ключей называется программный компонент на стороне клиента, который содержит хранилище ключей с главным ключом столбца.A key store provider is a client-side software component that holds a key store that has the column master key.

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

  • принимает имя поставщика хранилища ключей;Uses a key store provider name
  • ищет нужный поставщик хранилища ключей в своем реестре поставщиков хранилищ ключей;Searches for the key store provider in the driver's registry of key store providers

затем он применяет поставщик для расшифровки ключей шифрования столбцов.The driver then uses the provider to decrypt column encryption keys. Ключи шифрования столбцов шифруются главным ключом столбца.The column encryption keys are protected by a column master key. Главный ключ столбца хранится в базовом хранилище ключей.The column master key is stored in the underlying key store. Затем значение ключа шифрования столбца в виде открытого текста используется для шифрования параметров запроса, соответствующих зашифрованным столбцам базы данных.A plaintext value of the column encryption key is then used to encrypt query parameters that correspond to encrypted database columns. Он также нужен для расшифровки результатов запроса из зашифрованных столбцов.Or, the column encryption key decrypts query results from encrypted columns.

Библиотеки драйвера клиента с поддержкой Always Encrypted включают в себя поставщики хранилища ключей для распространенных хранилищ ключей.Always Encrypted-enabled client driver libraries include key store providers for popular key stores.

Набор доступных поставщиков зависит от типа и версии драйвера клиента.A set of available providers depends on the type and the version of the client driver. Сведения о конкретных драйверах см. в документации по Always Encrypted: Разработка приложений с помощью Always Encrypted.See the Always Encrypted documentation for particular drivers: Develop applications using Always Encrypted.

В следующей таблице показаны имена системных поставщиков.The following table shows the names of system providers:

Имя поставщика хранилища ключейKey store provider name Базовое хранилище ключейUnderlying key store
'MSSQL_CERTIFICATE_STORE''MSSQL_CERTIFICATE_STORE' Хранилище сертификатов WindowsWindows Certificate Store
'MSSQL_CSP_PROVIDER''MSSQL_CSP_PROVIDER' Хранилище, например аппаратный модуль безопасности (HSM), которое поддерживает интерфейс Microsoft CryptoAPI.A store, such as a hardware security module (HSM), that supports Microsoft CryptoAPI.
'MSSQL_CNG_STORE''MSSQL_CNG_STORE' Хранилище, например аппаратный модуль безопасности (HSM), с поддержкой API шифрования следующего поколения.A store, such as a hardware security module (HSM), that supports Cryptography API: Next Generation.
AZURE_KEY_VAULT'AZURE_KEY_VAULT' См. статью Приступая к работе с хранилищем ключей Azure.See Getting Started with Azure Key Vault
MSSQL_JAVA_KEYSTORE'MSSQL_JAVA_KEYSTORE' Хранилище ключей Java.}Java Key Store.}

Вы можете настроить пользовательский поставщик хранилища ключей в драйвере клиента Always Encrypted, чтобы хранить главные ключи столбцов, для которых нет встроенного поставщика хранилища ключей.In your Always Encrypted-enabled client driver, you can set up a custom key store provider that stores column master keys for which there's no built-in key store provider. Обратите внимание на то, что имена пользовательских поставщиков хранилища ключей не могут начинаться с префикса MSSQL_, так как он зарезервирован для поставщиков хранилищ ключей MicrosoftMicrosoft.The names of custom key store providers can't start with 'MSSQL_', which is a prefix reserved for MicrosoftMicrosoft key store providers.

key_pathkey_path
Путь к ключу в хранилище главных ключей столбцов.The path of the key in the column master key store. Путь к ключу должен быть допустимым для каждого клиентского приложения, которое будет шифровать или расшифровывать данные.The key path must be valid for each client application expected to encrypt or decrypt data. Данные хранятся в столбце, который (косвенно) защищен главным ключом столбца.The data is stored in a column that's (indirectly) protected by the referenced column master key. Клиентскому приложению нужен доступ к этому ключу.The client application must have access to the key. Формат пути к ключу зависит от поставщика хранилища ключей.The format of the key path is specific to the key store provider. Ниже представлен список форматов путей к ключам для системных поставщиков хранилища ключей Майкрософт.The following list describes the format of key paths for particular Microsoft system key store providers.

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

    Формат пути к ключу: Имя_хранилища_сертификатов/Расположение_хранилища_сертификатов/Отпечаток_сертификатаKey path format: CertificateStoreName/CertificateStoreLocation/CertificateThumbprint

    Где:Where:

    РасположениеХранилищаСертификатовCertificateStoreLocation
    Расположение хранилища сертификатов: текущий пользователь или локальный компьютер.Certificate store location, which must be Current User or Local Machine. Дополнительные сведения см. в статье Хранилища сертификатов "Локальный компьютер" и "Текущий пользователь".For more information, see Local Machine and Current User Certificate Stores.

    ИмяХранилищаСертификатовCertificateStore
    Имя хранилища сертификатов, например My.Certificate store name, for example 'My'.

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

    Примеры:Examples:

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

    Формат пути к ключу: Имя_поставщика/Идентификатор_ключаKey path format: ProviderName/KeyIdentifier

    Где:Where:

    ProviderNameProviderName
    Имя поставщика службы шифрования (CSP) с поддержкой CAPI, который предоставляет хранилище главных ключей столбцов.The name of a Cryptography Service Provider (CSP), which implements CAPI, for the column master key store. Если в качестве хранилища ключей используется модуль HSM, здесь следует указать имя поставщика службы шифрования, предоставляемого поставщиком модуля HSM.If you use an HSM as a key store, the provider name must be the name of the CSP your HSM vendor supplies. Поставщик должен быть установлен на клиентском компьютере.The provider must be installed on a client computer.

    ИдентификаторКлючаKeyIdentifier
    Идентификатор ключа, используемого в качестве главного ключа столбца, в хранилище ключей.Identifier of the key, used as a column master key, in the key store.

    Примеры:Examples:

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

    Формат пути к ключу: Имя_поставщика/Идентификатор_ключаKey path format: ProviderName/KeyIdentifier

    Где:Where:

    ProviderNameProviderName
    Имя поставщика хранилища ключей с поддержкой API шифрования следующего поколения, который предоставляет хранилище главных ключей столбцов.Name of the Key Storage Provider (KSP), which implements the Cryptography: Next Generation (CNG) API, for the column master key store. Если в качестве хранилища ключей используется модуль HSM, здесь следует указать имя поставщика хранилища ключей, предоставляемого изготовителем модуля HSM.If you use an HSM as a key store, the provider name must be the name of the KSP your HSM vendor supplies. Поставщик должен быть установлен на клиентском компьютере.The provider must be installed on a client computer.

    ИдентификаторКлючаKeyIdentifier
    Идентификатор ключа, используемого в качестве главного ключа столбца, в хранилище ключей.Identifier of the key, used as a column master key, in the key store.

    Примеры:Examples:

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

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

    Где:Where:

    KeyUrlKeyUrl
    URL-адрес ключа в Azure Key Vault.The URL of the key in Azure Key Vault

ENCLAVE_COMPUTATIONSENCLAVE_COMPUTATIONS
Указывает, что главный ключ столбца поддерживает анклав.Specifies that the column master key is enclave-enabled. Все ключи шифрования столбцов, зашифрованные с помощью главного ключа столбца, можно предоставить в совместный доступ для безопасного анклава на стороне сервера и использовать их для вычислений внутри анклава.You can share all column encryption keys, encrypted with the column master key, with a server-side secure enclave and use them for computations inside the enclave. Дополнительные сведения см. в статье Always Encrypted с безопасными анклавами.For more information, see Always Encrypted with secure enclaves.

signaturesignature
Двоичный литерал, полученный путем подписывания пути к ключу и значения параметра ENCLAVE_COMPUTATIONS главным ключом столбца.A binary literal that's a result of digitally signing key path and the ENCLAVE_COMPUTATIONS setting with the column master key. Эта подпись отражает, включен ли параметр ENCLAVE_COMPUTATIONS.The signature reflects whether ENCLAVE_COMPUTATIONS is specified or not. Подпись защищает подписанные значения от изменений неавторизованными пользователями.The signature protects the signed values from being altered by unauthorized users. Драйвер клиента с включенной поддержкой шифрования Always Encrypted проверяет подпись и возвращает ошибку в приложение, если подпись недопустима.An Always Encrypted-enabled client driver verifies the signature and returns an error to the application if the signature is invalid. Подпись должна быть создана с помощью средств на стороне клиента.The signature must be generated using client-side tools. Дополнительные сведения см. в статье Always Encrypted с безопасными анклавами.For more information, see Always Encrypted with secure enclaves.

RemarksRemarks

Элемент метаданных главного ключа столбца следует создать, прежде чем создавать элемент метаданных ключа шифрования столбца в базе данных и применять Always Encrypted для шифрования столбцов в базе данных.Create a column master key metadata entry before you create a column encryption key metadata entry in the database and before any column in the database can be encrypted using Always Encrypted. Элемент главного ключа столбца в метаданных не содержит фактического значения главного ключа столбца.A column master key entry in the metadata doesn't contain the actual column master key. Главный ключ столбца должен храниться во внешнем хранилище ключей столбца (за пределами SQL Server).The column master key must be stored in an external column key store (outside of SQL Server). Имя поставщика хранилища ключей и путь к главному ключу столбца в метаданных должны быть допустимыми для клиентского приложения.The key store provider name and the column master key path in the metadata must be valid for a client application. Клиентскому приложению следует использовать главный ключ столбца для расшифровки ключа шифрования столбца.The client application needs to use the column master key to decrypt a column encryption key. Ключ шифрования столбца шифруется с помощью главного ключа столбца.The column encryption key is encrypted with the column master key. Клиентскому приложению также нужно выполнять запросы по зашифрованным столбцам.The client application also needs to query encrypted columns.

Для управления главным ключами столбцов рекомендуется использовать такие средства, как SQL Server Management Studio (SSMS) или PowerShell.It is recommended you use tools, such as SQL Server Management Studio (SSMS) or PowerShell to manage column master keys. Такие средства создают подписи (если используется Always Encrypted с безопасными анклавами) и автоматически выдают инструкции CREATE COLUMN MASTER KEY для создания объектов метаданных ключа шифрования столбцов.Such tools generate signatures (if you are using Always Encrypted with secure enclaves) and automatically issue CREATE COLUMN MASTER KEY statements to create column encryption key metadata objects. См. разделы Подготовка ключей Always Encrypted с помощью SQL Server Management Studio и Подготовка ключей Always Encrypted с помощью PowerShell.See Provision Always Encrypted keys using SQL Server Management Studio and Provision Always Encrypted keys using PowerShell.

РазрешенияPermissions

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

ПримерыExamples

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

Следующий пример создает элемент метаданных главного ключа столбца для главного ключа столбца.The following example creates a column master key metadata entry for a column master key. Главный ключ столбца сохраняется в хранилище сертификатов, чтобы предоставить доступ к нему клиентским приложениям, которые используют поставщик MSSQL_CERTIFICATE_STORE.The column master key is stored in the Certificate Store for client applications that use the MSSQL_CERTIFICATE_STORE provider to access the column master key:

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

Создайте элемент метаданных главного ключа столбца для главного ключа столбца.Create a column master key metadata entry for a column master key. Клиентские приложения, которые используют поставщик MSSQL_CNG_STORE, получат доступ к главному ключу столбца:Client applications, which use the MSSQL_CNG_STORE provider, access the column master key:

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

Создайте элемент метаданных главного ключа столбца для главного ключа столбца.Create a column master key metadata entry for a column master key. Главный ключ столбца сохраняется в Azure Key Vault, чтобы предоставить доступ к нему клиентским приложениям, которые используют поставщик AZURE_KEY_VAULT.The column master key is stored in the Azure Key Vault, for client applications that use the AZURE_KEY_VAULT provider, to access the column master key.

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 a column master key metadata entry for a column master key. Главный ключ столбца сохраняется в пользовательском хранилище главных ключей столбцов.The column master key is stored in a custom column master key store:

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

Б.B. Создание главного ключа столбца с поддержкой анклаваCreating an enclave-enabled column master key

Следующий пример создает элемент метаданных главного ключа столбца для главного ключа столбца с поддержкой анклава.The following example creates a column master key metadata entry for an enclave-enabled column master key. Главный ключ столбца с поддержкой анклава сохраняется в хранилище сертификатов, чтобы предоставить доступ к нему клиентским приложениям, которые используют поставщик MSSQL_CERTIFICATE_STORE.The enclave-enabled column master key is stored in a Certificate Store, for client applications that use the MSSQL_CERTIFICATE_STORE provider to access the column master key:

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

Создайте элемент метаданных главного ключа столбца для главного ключа столбца с поддержкой анклава.Create a column master key metadata entry for an enclave-enabled column master key. Главный ключ столбца с поддержкой анклава сохраняется в Azure Key Vault, чтобы предоставить доступ к нему клиентским приложениям, которые используют поставщик AZURE_KEY_VAULT.The enclave-enabled column master key is stored in the Azure Key Vault, for client applications that use the AZURE_KEY_VAULT provider, to access the column master key.

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)
  );

См. также:See Also