Инструкция CREATE CERTIFICATE (Transact-SQL)

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics

Добавляет сертификат в базу данных в SQL Server.

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

Примечание.

В SQL Server 2022 (16.x) сертификаты с закрытыми ключами можно создать резервную копию или восстановить непосредственно в файлы или двоичные BLOB-объекты с помощью формата пар открытых ключей (PKCS) #12 или обмена персональными данными (PFX). Все системные сертификаты имеют минимальную силу RSA-3072 в SQL Server 2022 (16.x).

Формат PKCS #12 или PFX — это двоичный формат для хранения сертификата сервера, всех промежуточных сертификатов и закрытого ключа в одном файле. PFX-файлы обычно имеют такие расширения, как .pfx и .p12. Для клиентов это упрощает соблюдение текущих рекомендаций по обеспечению безопасности и стандартов соответствия требованиям, запрещающих шифрование RC4, устраняя необходимость использования таких средств преобразования, как PVKConverter (для формата PVK или DER).

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

Примечание.

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

Синтаксис

-- Syntax for SQL Server and Azure SQL Database  
  
CREATE CERTIFICATE certificate_name [ AUTHORIZATION user_name ]   
    { FROM <existing_keys> | <generate_new_keys> }  
    [ ACTIVE FOR BEGIN_DIALOG = { ON | OFF } ]  
  
<existing_keys> ::=   
    ASSEMBLY assembly_name  
    | {   
        [ EXECUTABLE ] FILE = 'path_to_file'  
        [ WITH [FORMAT = 'PFX',]
          PRIVATE KEY ( <private_key_options> ) ]   
      }  
    | {   
        BINARY = asn_encoded_certificate  
        [ WITH PRIVATE KEY ( <private_key_options> ) ]  
      }  
<generate_new_keys> ::=   
    [ ENCRYPTION BY PASSWORD = 'password' ]   
    WITH SUBJECT = 'certificate_subject_name'   
    [ , <date_options> [ ,...n ] ]   
  
<private_key_options> ::=  
      {   
        FILE = 'path_to_private_key'  
         [ , DECRYPTION BY PASSWORD = 'password' ]  
         [ , ENCRYPTION BY PASSWORD = 'password' ]    
      }  
    |  
      {   
        BINARY = private_key_bits  
         [ , DECRYPTION BY PASSWORD = 'password' ]  
         [ , ENCRYPTION BY PASSWORD = 'password' ]    
      }  
  
<date_options> ::=  
    START_DATE = 'datetime' | EXPIRY_DATE = 'datetime'  
-- Syntax for Parallel Data Warehouse  
  
CREATE CERTIFICATE certificate_name   
    { <generate_new_keys> | FROM <existing_keys> }  
    [ ; ]  
  
<generate_new_keys> ::=   
    WITH SUBJECT = 'certificate_subject_name'   
    [ , <date_options> [ ,...n ] ]   
  
<existing_keys> ::=   
    {   
      FILE ='path_to_file'  
      WITH PRIVATE KEY   
         (   
           FILE = 'path_to_private_key'  
           , DECRYPTION BY PASSWORD ='password'   
         )  
    }  
  
<date_options> ::=  
    START_DATE ='datetime' | EXPIRY_DATE ='datetime'  

Примечание.

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

certificate_name
Имя сертификата в базе данных.

AUTHORIZATION user_name
Имя пользователя, которому принадлежит сертификат.

ASSEMBLY assembly_name
Указывает подписанную сборку, уже загруженную в базу данных.

[ EXECUTABLE ] FILE = 'path_to_file'
Указывает полный путь, включающий имя файла, к файлу, зашифрованному по правилам DER и содержащему сертификат. Если используется параметр EXECUTABLE, то файл является библиотекой DLL, заверенной с использованием данного сертификата. path_to_file может быть локальным путем или UNC-путем к расположению в сети. Доступ к файлу осуществляется в контексте безопасности учетной записи службы SQL Server. Эта учетная запись должна иметь соответствующие разрешения на доступ в файловой системе.

Важно!

База данных SQL Azure не поддерживает создание сертификата на основе файла или с использованием файлов закрытых ключей.

BINARY = asn_encoded_certificate
Биты закодированного в ASN сертификата, указанного в качестве двоичной константы.
Область применения: SQL Server 2012 (11.x) и более поздних версий.

WITH FORMAT = 'PFX'
Область применения: SQL Server 2022 (16.x) и более поздних версий
Указывает на создание сертификата из PFX-файла. Предложение не является обязательным.

WITH PRIVATE KEY
Указывает, что закрытый ключ сертификата загружается в SQL Server. Это предложение действительно лишь в случае, когда сертификат создается из сборки. Для загрузки закрытого ключа сертификата, созданного из сборки, следует использовать команду ALTER CERTIFICATE.

FILE ='path_to_private_key'
Указывает полный путь к закрытому ключу, включая имя файла. path_to_private_key может быть локальным путем или UNC-путем к расположению в сети. Доступ к файлу осуществляется в контексте безопасности учетной записи службы SQL Server. Эта учетная запись должна иметь соответствующие разрешения на доступ в файловой системе.

Важно!

Этот параметр недоступен в автономной базе данных или в Базе данных SQL Azure.

BINARY = private_key_bits
Область применения: SQL Server (начиная с SQL Server 2012 (11.x)) и База данных SQL Azure.

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

DECRYPTION BY PASSWORD = 'key_password'
Указывает пароль, необходимый для расшифровки закрытого ключа, получаемого из файла. Это предложение необязательно, если закрытый ключ защищен пустым паролем. Не рекомендуется сохранять закрытый ключ в файл без защиты паролем. Если требуется ввод пароля, но верный пароль не указан, выполнение инструкции завершится ошибкой.

ENCRYPTION BY PASSWORD = 'пароль'
Указывает пароль для шифрования закрытого ключа. Этот аргумент нужно использовать лишь в том случае, если необходимо зашифровать сертификат с помощью пароля. Если аргумент опущен, закрытый ключ шифруется с использованием главного ключа базы данных. пароль должен соответствовать требованиям политики паролей Windows компьютера, на котором выполняется экземпляр SQL Server. Дополнительные сведения см. в разделе Политика паролей.

SUBJECT = 'certificate_subject_name'
Термин subject (субъект) относится к полю в метаданных сертификата, определяемому стандартом X.509. Тема должна быть не более 64 символов, и это ограничение применяется для SQL Server на Linux. Для SQL Server в Windows тема может содержать до 128 символов. Субъекты, имеющие длину более 128 символов, усекаются при сохранении в каталоге, однако в большом двоичном объекте (BLOB), содержащем сертификат, сохраняется полное имя субъекта.

START_DATE = 'datetime'
Дата, начиная с которой сертификат действителен. Если она не указана, в качестве значения START_DATE устанавливается текущая дата. Значение START_DATE имеет формат времени UTC. Это значение можно указать в любом формате, который можно преобразовать в формат даты и времени.

EXPIRY_DATE = 'datetime'
Дата истечения срока действия сертификата. Если она не указана, для EXPIRY_DATE устанавливается дата через год от START_DATE. Значение EXPIRY_DATE имеет формат времени UTC. Это значение можно указать в любом формате, который можно преобразовать в формат даты и времени. Sql Server Service Broker проверка дату окончания срока действия. Во время резервного копирования с шифрованием при помощи сертификатов также проходит проверка даты окончания срока действия сертификата. Если он просрочен, резервная копия не создается, но восстановление с просроченным сертификатом допускается. Тем не менее срок действия не проверяется, когда сертификат используется для шифрования баз данных или для функции Always Encrypted.

ACTIVE FOR BEGIN_DIALOG = { ON | OFF }
Делает сертификат доступным инициатору диалога Service Broker. Значение по умолчанию — ON.

Замечания

Сертификат — это защищаемый объект уровня базы данных, соответствующий стандарту X.509 и поддерживающий поля X.509 V1. Инструкция CREATE CERTIFICATE может загрузить сертификат из файла, двоичной константы или сборки. Она также может создать пару ключей и самостоятельно подписанный сертификат.

Закрытый ключ должен быть <= 2500 байт в зашифрованном формате. Закрытые ключи, созданные SQL Server, имеют длину 1024 бита до SQL Server 2014 (12.x) и имеют длину 2048 бит, начиная с SQL Server 2016 (13.x). Закрытые ключи, импортированные из внешнего источника, имеют минимальную длину в 384 бит и максимальную длину в 4 096 бит. Длина импортируемого закрытого ключа должна быть кратной 64 бит. Для сертификатов, используемых для прозрачного шифрования данных, размер закрытого ключа ограничен 3456 битами.

Сохраняется весь серийный номер сертификата, но в представлении каталога sys.certificates отображаются только первые 16 байт.

Сохраняется все поле издателя, но в представлении каталога sys.certificates отображаются только первые 884 байта.

Закрытый ключ должен соответствовать открытому ключу, заданному аргументом certificate_name.

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

Параметр ENCRYPTION BY PASSWORD не требуется, если закрытый ключ зашифрован главным ключом базы данных. Использовать этот параметр следует лишь тогда, когда закрытый ключ будет зашифрован паролем. Если пароль не указан, закрытый ключ будет зашифрован с использованием главного ключа базы данных. Если главный ключ базы данных не может быть открыт, пропуск этого предложения вызовет ошибку.

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

Примечание.

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

Двоичное описание сертификата можно создать с помощью функций CERTENCODED (Transact-SQL) и CERTPRIVATEKEY (Transact-SQL). Пример использования функций CERTPRIVATEKEY и CERTENCODED для копирования сертификата в другую базу данных см. в примере Б в руководстве по использованию CERTENCODED в Transact-SQL.

Алгоритмы MD2, MD4, MD5, SHA и SHA1 устарели в SQL Server 2016 (13.x). До SQL Server 2016 (13.x), самозаверяющий сертификат создается с помощью SHA1. Начиная с SQL Server 2017 (14.x), самозаверяющий сертификат создается с помощью SHA2_256.

Разрешения

Необходимо разрешение CREATE CERTIFICATE на базу данных. Сертификаты могут принадлежать только именам входа Windows, именам входа SQL Server и ролям приложений. Сертификаты не могут принадлежать группам и ролям.

Примеры

А. Создание самозаверяющего сертификата

В следующем примере будет создан сертификат под названием Shipping04. Закрытый ключ этого сертификата защищен паролем.

CREATE CERTIFICATE Shipping04   
   ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'  
   WITH SUBJECT = 'Sammamish Shipping Records',   
   EXPIRY_DATE = '20201031';  
GO  

B. Создание сертификата из файла

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

CREATE CERTIFICATE Shipping11   
    FROM FILE = 'c:\Shipping\Certs\Shipping11.cer'   
    WITH PRIVATE KEY (FILE = 'c:\Shipping\Certs\Shipping11.pvk',   
    DECRYPTION BY PASSWORD = 'sldkflk34et6gs%53#v00');  
GO   

Важно!

База данных SQL Azure не поддерживает создание сертификата на основе файла.

C. Создание сертификата из заверенного исполняемого файла

CREATE CERTIFICATE Shipping19   
    FROM EXECUTABLE FILE = 'c:\Shipping\Certs\Shipping19.dll';  
GO  

Возможно также создание сборки из файла библиотеки dll, а затем создание сертификата из сборки.

CREATE ASSEMBLY Shipping19   
    FROM 'c:\Shipping\Certs\Shipping19.dll'   
    WITH PERMISSION_SET = SAFE;  
GO  
CREATE CERTIFICATE Shipping19 FROM ASSEMBLY Shipping19;  
GO  

Важно!

База данных SQL Azure не поддерживает создание сертификата на основе файла.

Важно!

Начиная с SQL Server 2017 (14.x), параметр конфигурации сервера CLR strict security предотвращает загрузку сборок без предварительной настройки безопасности для них. Загрузить сертификат, создайте имя входа из него, предоставьте UNSAFE ASSEMBLY для этого имени входа и затем загрузите сборку.

D. Создание самозаверяющего сертификата

В следующем примере создается сертификат Shipping04 без указания пароля шифрования. Этот пример можно использовать с системой платформы Аналитики (PDW).

CREATE CERTIFICATE Shipping04   
   WITH SUBJECT = 'Sammamish Shipping Records';  
GO  

Д. Создание сертификата из PFX-файла

CREATE CERTIFICATE Shipping04
    FROM FILE = 'c:\storedcerts\shipping04cert.pfx'
    WITH 
    FORMAT = 'PFX', 
	PRIVATE KEY (
        DECRYPTION BY PASSWORD = '9n34khUbhk$w4ecJH5gh'
	);  

См. также

ALTER CERTIFICATE (Transact-SQL)
DROP CERTIFICATE (Transact-SQL)
СЕРТИФИКАТ BACKUP (Transact-SQL)
Иерархия средств шифрования
EVENTDATA (Transact-SQL)
CERTENCODED (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)
CERT_ID (Transact-SQL)
CERTPROPERTY (Transact-SQL)