CREATE CERTIFICATE (Transact-SQL)

Adiciona um certificado a um banco de dados.

Ícone de vínculo de tópicoConvenções de sintaxe 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 privada de um assembly, use ALTER CERTIFICATE.

  • FILE ='path_to_private_key'
    Especifica o caminho completo, incluindo o nome de arquivo, para a chave privada. 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 privada que é recuperada de um arquivo. Essa cláusula será opcional se a chave privada for protegida por uma senha nula. Não é recomendável salvar uma chave privada 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 privada. Use esta opção somente se quiser criptografar o certificado com uma senha. Se essa cláusula for omitida, a chave privada será criptografada usando a chave mestra do banco de dados. A password deve atender aos requisitos de política 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 assunto 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 não especificada, START_DATE será definida com a data atual. START_DATE está na hora UTC e pode ser especificado em qualquer formato que possa ser convertido em uma data e hora.

  • EXPIRY_DATE ='datetime'
    É a data na qual o certificado expira. Se não for especificada, EXPIRY_DATE será definida 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 uma 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 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 autoassinado.

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 privada importada deve ser um número inteiro múltiplo de 64 bits.

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

Ao criar um certificado de um contêiner, o carregamento da chave privada é opcional. Mas quando o SQL Server gera um certificado autoassinado, a chave privada sempre é criada. Por padrão, a chave privada é 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 privada for criptografada com a chave mestra do banco de dados. Use essa opção somente quando a chave privada for criptografada com uma senha. Se nenhuma senha for especificada, a chave privada 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 privada 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 autoassinado

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

USE AdventureWorks2008R2;
CREATE CERTIFICATE Shipping04 
   ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
   WITH SUBJECT = 'Sammamish Shipping Records', 
   EXPIRY_DATE = '20121031';
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 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 

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

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