CREATE SYMMETRIC KEY (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics

Создает симметричный ключ и указывает его свойства в SQL Server.

Эта функция несовместима с экспортом базы данных с использованием платформы приложения уровня данных (DACFx). Необходимо удалить все симметричные ключи перед экспортом.

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

Примечание.

Этот синтаксис не поддерживается бессерверным пулом SQL в Azure Synapse Analytics.

Синтаксис

CREATE SYMMETRIC KEY key_name
    [ AUTHORIZATION owner_name ]
    [ FROM PROVIDER provider_name ]
    WITH
        [
            <key_options> [ , ... n ]
            | ENCRYPTION BY <encrypting_mechanism> [ , ... n ]
        ]

<key_options> ::=
    KEY_SOURCE = 'pass_phrase'
    | ALGORITHM = <algorithm>
    | IDENTITY_VALUE = 'identity_phrase'
    | PROVIDER_KEY_NAME = 'key_name_in_provider'
    | CREATION_DISPOSITION = { CREATE_NEW | OPEN_EXISTING }

<algorithm> ::=
    DES | TRIPLE_DES | TRIPLE_DES_3KEY | RC2 | RC4 | RC4_128
    | DESX | AES_128 | AES_192 | AES_256

<encrypting_mechanism> ::=
    CERTIFICATE certificate_name
    | PASSWORD = 'password'
    | SYMMETRIC KEY symmetric_key_name
    | ASYMMETRIC KEY asym_key_name

Аргументы

key_name

Уникальное имя, под которым симметричный ключ известен в базе данных. Это обязательный параметр. Временные ключи назначаются, когда key_name начинается с одного знака (#). Например, #temporaryKey900007. Вы не можете создать симметричный ключ, имеющий имя, которое начинается с нескольких.# Не удается создать временный симметричный ключ с помощью поставщика EKM.

AUTHORIZATION owner_name

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

FROM PROVIDER provider_name

Указывает поставщик расширенного управления ключами и его имя. Ключ не экспортируется с устройства EKM. Поставщик должен быть определен сначала с помощью инструкции CREATE PROVIDER . Дополнительные сведения о создании поставщиков внешних ключей см. в разделе Расширенное управление ключами (EKM).

Примечание.

Этот параметр недоступен в автономной базе данных.

KEY_SOURCE = "pass_phrase"

Указывает парольную фразу, из которой следует наследовать ключ.

IDENTITY_VALUE = "identity_phrase"

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

PROVIDER_KEY_NAME = 'имя_ключа_у_поставщика'

Указывает имя, на которое ссылается поставщик расширенного управления ключами.

Примечание.

Этот параметр недоступен в автономной базе данных.

CREATION_DISPOSITION = { CREATE_NEW | OPEN_EXISTING }

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

  • CREATE_NEW

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

  • OPEN_EXISTING

    Сопоставляет симметричный ключ SQL Server с существующим ключом системы расширенного управления ключами. Если CREATION_DISPOSITION = OPEN_EXISTING этот параметр не указан, по умолчанию используется CREATE_NEWзначение .

certificate_name

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

'password'

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

symmetric_key_name

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

asym_key_name

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

<algorithm>

Указывает алгоритм шифрования.

Предупреждение

Начиная с SQL Server 2016 (13.x), все алгоритмы, отличные от AES_128, AES_192 и AES_256, устарели. Чтобы использовать старые алгоритмы (что не рекомендуется), необходимо установить уровень совместимости базы данных 120 или ниже.

Замечания

При создании симметричного ключа симметричный ключ должен быть зашифрован по крайней мере одним из следующих параметров:

  • сертификат
  • password
  • симметричный ключ
  • асимметричный ключ
  • ПОСТАВЩИК

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

Внимание

Если симметричный ключ шифруется с использованием пароля вместо сертификата (или другого ключа), для шифрования пароля используется алгоритм шифрования TRIPLE DES. Поэтому ключи, созданные с помощью сильных алгоритмов шифрования, таких как AES, защищены с помощью более слабого алгоритма.

Необязательный пароль можно использовать для шифрования симметричного ключа перед распространением ключа нескольким пользователям.

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

IDENTITY_VALUE создает ИДЕНТИФИКАТОР GUID, с помощью которого следует тегировать данные, зашифрованные с помощью нового симметричного ключа. Маркирование может быть использовано для сопоставления ключей шифрованным данным. Идентификатор GUID, формируемый указанной фразой, будет всегда одним и тем же. После того как фраза была использована для создания GUID, фраза не может использоваться повторно, пока в этой базе данных есть по крайней мере один симметричный ключ, активно использующий фразу. IDENTITY_VALUE является необязательным предложением; Однако рекомендуется использовать его при хранении данных, зашифрованных с помощью временного ключа.

Алгоритм шифрования по умолчанию отсутствует.

Внимание

Мы не рекомендуем использовать шифры потока RC4 и RC4_128 для защиты конфиденциальных данных. SQL Server не кодирует шифрование, выполняемого с такими ключами.

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

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

Уточнение алгоритмов DES

  • DESX был именован неправильно. Симметричные ключи, созданные с параметром ALGORITHM = DESX, в действительности используют шифр TRIPLE DES с 192-битным ключом. Алгоритм DESX не предоставляется. Эта функция будет удалена в будущей версии SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.
  • Симметричные ключи, созданные с параметром ALGORITHM = TRIPLE_DES_3KEY, используют шифр TRIPLE DES с 192-битным ключом.
  • Симметричные ключи, созданные с параметром ALGORITHM = TRIPLE_DES, используют шифр TRIPLE DES с 128-битным ключом.

Нерекомендуция алгоритма RC4

Повторяющееся использование одного и того же RC4 или RC4_128 KEY_GUID в разных блоках данных приводит к тому же ключу RC4, так как SQL Server не предоставляет соль автоматически. Использование одного и того же ключа RC4 неоднократно является известной ошибкой, которая приводит к очень слабому шифрованию. Таким образом, ключевые слова RC4 и RC4_128 являются устаревшими. Эта функция будет удалена в будущей версии SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.

Предупреждение

Алгоритм RC4 поддерживается только в целях обратной совместимости. Когда база данных имеет уровень совместимости 90 или 100, новые материалы могут шифроваться только с помощью алгоритмов RC4 или RC4_128. (Не рекомендуется.) Используйте вместо этого более новые алгоритмы, например AES. В SQL Server материалы, зашифрованные с помощью алгоритмов RC4 или RC4_128, могут быть расшифрованы на любом уровне совместимости.

Разрешения

Необходимо разрешение ALTER ANY SYMMETRIC KEY на базу данных. Если AUTHORIZATION задано, требуется разрешение IMPERSONATE для пользователя базы данных или разрешения ALTER для роли приложения. Если для шифрования использовался сертификат или асимметричный ключ, то требуется разрешение VIEW DEFINITION для сертификата или асимметричного ключа. Только имена входа Windows, имена входа SQL Server и роли приложений могут принадлежать симметричным ключам. Симметричные ключи не могут принадлежать группам и ролям.

Примеры

А. Создание симметричного ключа

В следующем примере создается симметричный ключ с именем JanainaKey09 с помощью алгоритма AES 256, а затем новый ключ шифруется с применением сертификата Shipping04.

CREATE SYMMETRIC KEY JanainaKey09
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE Shipping04;
GO

B. Создание временного симметричного ключа

В следующем примере создается временный симметричный ключ, вызываемый #MarketingXXV из парольной фразы: The square of the hypotenuse is equal to the sum of the squares of the sides Ключу назначается идентификатор GUID, формируемый из строки Pythagoras и зашифрованный сертификатом Marketing25.

CREATE SYMMETRIC KEY #MarketingXXV
WITH ALGORITHM = AES_128,
KEY_SOURCE
     = 'The square of the hypotenuse is equal to the sum of the squares of the sides',
IDENTITY_VALUE = 'Pythagoras'
ENCRYPTION BY CERTIFICATE Marketing25;
GO

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

В следующем примере демонстрируется создание симметричного ключа с именем MySymKey при помощи поставщика с именем MyEKMProvider и имени ключа KeyForSensitiveData. Назначается авторизация для пользователя User1; при этом подразумевается, что системным администратором уже зарегистрирован поставщик с именем MyEKMProvider в SQL Server.

CREATE SYMMETRIC KEY MySymKey
AUTHORIZATION User1
FROM PROVIDER EKMProvider
WITH
PROVIDER_KEY_NAME='KeyForSensitiveData',
CREATION_DISPOSITION=OPEN_EXISTING;
GO

См. также