CREATE SYMMETRIC KEY (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. Дополнительные сведения о создании внешних поставщиков ключей см. в разделе Основные сведения о расширенном управлении ключами (EKM).KEY_SOURCE ='pass_phrase'
Указывает парольную фразу, из которой извлекается ключ.IDENTITY_VALUE ='identity_phrase'
Указывает идентифицирующую фразу, из которой будет формироваться идентификатор GUID для маркировки данных, зашифрованных с помощью временного ключа.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 эта возможность будет удалена. Не используйте ее при работе над новыми приложениями и как можно быстрее измените приложения, в которых она в настоящее время используется.
Разрешения
Необходимо разрешение 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
С. Создание симметричного ключа с помощью устройства расширенного управления ключами
В следующем примере демонстрируется создание симметричного ключа с именем 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