CREATE SYMMETRIC KEY (Transact-SQL)

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

Применимо для следующих объектов: SQL Server (начиная с SQL Server 2008 до текущей версии).

Значок ссылки на раздел Cинтаксические обозначения в Transact-SQL

Синтаксис

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
    Уникальное имя, под которым симметричный ключ известен в базе данных. Имена временных ключей должны начинаться с одиночного символа номера (#). Например, #temporaryKey900007. Нельзя создать симметричный ключ, в начале имени которого указано более одного символа #. Временный симметричный ключ невозможно создать с помощью поставщика расширенного управления ключами.

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

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

    Примечание

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

  • KEY_SOURCE ='pass_phrase'
    Указывает парольную фразу, из которой извлекается ключ.

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

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

    Примечание

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

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

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

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

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

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

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

Замечания

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

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

Если симметричный ключ шифруется с использованием пароля вместо открытого ключа главного ключа базы данных, то используется алгоритм шифрования 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 не предоставляется. В будущей версии Microsoft 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 являются устаревшими. В будущей версии Microsoft SQL Server этот компонент будет удален. Не используйте его при работе над новыми приложениями и как можно быстрее измените приложения, в которых он в настоящее время используется.

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

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

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

В следующем примере создается временный симметричный ключ с именем #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

В.Создание симметричного ключа с помощью устройства расширенного управления ключами (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

См. также

Справочник

ALTER SYMMETRIC KEY (Transact-SQL)

DROP SYMMETRIC KEY (Transact-SQL)

sys.symmetric_keys (Transact-SQL)

Основные понятия

Выбор алгоритма шифрования

Иерархия средств шифрования

Расширенное управление ключами (Extensible Key Management)