CREATE CERTIFICATE (Transact-SQL)

Adiciona um certificado a um banco de dados.

Ícone de vínculo de tópicoConvenções de sintaxe de Transact-SQL

Sintaxe

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'

Argumentos

  • certificate_name
    É o nome pelo qual o certificado será conhecido no banco de dados.

  • AUTHORIZATION user_name
    É o nome do usuário que será proprietário desse certificado.

  • ASSEMBLY assembly_name
    Especifica um assembly assinado que já foi carregado no banco de dados.

  • [ EXECUTABLE ] FILE ='path_to_file'
    Especifica o caminho completo, incluindo nome de arquivo, para um arquivo codificado por DER que contém o certificado. Se a opção EXECUTABLE for usada, o arquivo será uma DLL que foi assinada pelo certificado. path_to_file pode ser um caminho local ou um caminho UNC para um local de rede. O arquivo será acessado no contexto de segurança da conta de serviço do SQL Server. Essa conta deve ter as permissões de sistema de arquivos necessárias.

  • WITH PRIVATE KEY
    Especifica que a chave privada do certificado foi carregada no SQL Server. Essa cláusula é válida apenas quando o certificado é criado a partir de um arquivo. Para carregar a chave particular de um assembly, use ALTER CERTIFICATE.

  • FILE ='path_to_private_key'
    Especifica o caminho completo, incluindo o nome de arquivo, para a chave particular. path_to_private_key pode ser um caminho local ou um caminho UNC para um local de rede. O arquivo será acessado no contexto de segurança da conta de serviço do SQL Server. Essa conta deve ter as permissões de sistema de arquivos necessárias.

  • DECRYPTION BY PASSWORD = 'key_password'
    Especifica a senha necessária para descriptografar uma chave particular que é recuperada de um arquivo. Essa cláusula será opcional se a chave particular for protegida por uma senha nula. Não é recomendável salvar uma chave particular em um arquivo sem proteção de senha. Se uma senha for necessária, mas nenhuma senha for especificada, a instrução falhará.

  • ENCRYPTION BY PASSWORD ='password'
    Especifica a senha que será usada para criptografar a chave particular. Use esta opção somente se quiser criptografar o certificado com uma senha. Se esta cláusula for omitida, a chave particular será criptografada com a chave mestra do banco de dados. A password deverá atender aos requisitos da diretiva de senha do Windows do computador que está executando a instância do SQL Server. Para obter mais informações, consulte Diretiva de senha.

  • SUBJECT = 'certificate_subject_name'
    O termo subject se refere a um campo nos metadados do certificado, conforme definido pelo padrão X.509. O assunto pode ter até 128 caracteres. Os assuntos que excederem 128 caracteres serão truncados quando forem armazenados no catálogo, mas o BLOB (objeto binário grande) que contém o certificado manterá o nome completo do assunto.

  • START_DATE ='datetime'
    É a data na qual o certificado se torna válido. Se seu valor não for especificado, START_DATE será definido com a data atual. START_DATE está na hora UTC e pode ser especificado em qualquer formato que possa ser convertido em data e hora.

  • EXPIRY_DATE ='datetime'
    É a data na qual o certificado expira. Se seu valor não for especificado, EXPIRY_DATE será definido com uma data um ano após START_DATE. EXPIRY_DATE está na hora UTC e pode ser especificado em qualquer formato que possa ser convertido em data e hora. O SQL Server Service Broker verifica a data de validade. No entanto, a validade não é forçada quando o certificado é usado para criptografia.

  • ACTIVE FOR BEGIN_DIALOG = { ON | OFF }
    Disponibiliza o certificado para o iniciador de uma conversação de caixa de diálogo do Service Broker. O valor padrão é ON.

Comentários

Um certificado é um protegível em nível de banco de dados que segue o padrão X.509 e oferece suporte aos campos X.509 V1. CREATE CERTIFICATE pode carregar um certificado de um arquivo ou assembly. Essa instrução também pode gerar um par de chaves e criar um certificado auto-assinado.

As chaves particulares geradas pelo SQL Server são de 1.024 bits. As chaves particulares importadas de uma origem externa têm um comprimento mínimo de 384 bits e máximo de 3.456 bits. O comprimento de uma chave particular importada deve ser um número inteiro múltiplo de 64 bits.

A chave particular deve corresponder à chave pública especificada por certificate_name.

Ao criar um certificado de um contêiner, o carregamento da chave particular é opcional. Mas quando o SQL Server gera um certificado auto-assinado, a chave particular sempre é criada. Por padrão, a chave particular é criptografada usando a chave mestra do banco de dados. Se a chave mestra do banco de dados não existir e nenhuma senha for especificada, a instrução falhará.

A opção ENCRYPTION BY PASSWORD não será necessária quando a chave particular for criptografada com a chave mestra do banco de dados. Use essa opção somente quando a chave particular for criptografada com uma senha. Se nenhuma senha for especificada, a chave particular do certificado será criptografada com a chave mestra do banco de dados. Omitir essa cláusula causará um erro se a chave mestra do banco de dados não puder ser aberta.

Não é necessário especificar uma senha de descriptografia quando a chave particular for criptografada com a chave mestra do banco de dados.

ObservaçãoObservação

As funções internas para criptografia e assinatura não verificam as datas de expiração de certificados. Os usuários dessas funções devem decidir quando verificar expiração de certificado.

Permissões

Requer a permissão CREATE CERTIFICATE no banco de dados. Somente logons do Windows, logons do SQL Server e funções de aplicativo podem possuir certificados. Grupos e funções não podem possuir certificados.

Exemplos

A. Criando um certificado auto-assinado

O exemplo a seguir cria um certificado denominado Shipping04. A chave particular desse certificado é protegida usando uma senha.

USE AdventureWorks;
CREATE CERTIFICATE Shipping04 
   ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
   WITH SUBJECT = 'Sammamish Shipping Records', 
   EXPIRY_DATE = '10/31/2009';
GO

B. Criando um certificado de um arquivo

O exemplo a seguir cria um certificado no banco de dados, carregando o par de chaves a partir de arquivos.

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

C. Criando um certificado a partir de um arquivo executável assinado

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

Como alternativa, é possível criar um assembly a partir do arquivo dll e, em seguida, um certificado a partir do assembly.

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