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

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

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

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

Синтаксис

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 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'

Аргументы

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

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

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

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

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

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

    Примечание

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

  • asn_encoded_certificate
    Биты закодированного сертификата ASN, указанного в качестве двоичной константы.

  • BINARY =private_key_bits

    Применимо для следующих объектов: С SQL Server 2012 по SQL Server 2014 включительно.

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

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

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

  • SUBJECT ='certificate_subject_name'
    Термин subject (субъект) относится к полю в метаданных сертификата, определяемому стандартом X.509. Он может иметь длину до 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 проверяет дату окончания срока действия, однако при использовании сертификата для шифрования срок действия не вступает в силу.

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

Замечания

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

Закрытые ключи, создаваемые SQL Server имеют в длину 1024 бит. Закрытые ключи, импортированные из внешнего источника, имеют минимальную длину в 384 бит и максимальную длину в 4096 бит. Длина импортируемого закрытого ключа должна быть кратной 64 бит.

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

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

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

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

Примечание

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

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

Разрешения

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

Примеры

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

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

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

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

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

USE AdventureWorks2012;
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 

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

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

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

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

См. также

Справочник

ALTER CERTIFICATE (Transact-SQL)

DROP CERTIFICATE (Transact-SQL)

BACKUP CERTIFICATE (Transact-SQL)

EVENTDATA (Transact-SQL)

CERTENCODED (Transact-SQL)

CERTPRIVATEKEY (Transact-SQL)

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

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