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

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

Значок ссылки на разделСинтаксические обозначения в 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> ) ] 
      }
        
<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' ]  

<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. Эта учетная запись должна иметь соответствующие разрешения на доступ в файловой системе.

  • 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 бит и максимальную длину в 3 456 бит. Длина импортируемого закрытого ключа должна быть кратной 64 бит.

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

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

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

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

ПримечаниеПримечание

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

Разрешения

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

Примеры

А. Создание самостоятельно подписанного сертификата

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

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

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

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

USE AdventureWorks2008R2;
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 AdventureWorks2008R2;
CREATE CERTIFICATE Shipping19 
    FROM EXECUTABLE FILE = 'c:\Shipping\Certs\Shipping19.dll';
GO

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

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