CREATE CERTIFICATE (Transact-SQL)

Adiciona um certificado a um banco de dados.

Ícone de vínculo de tópico Convençõ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> ) ] 
      }
    | { 
        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'

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á um DLL que assinado 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, até 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.

    ObservaçãoObservação

    Essa opção não está disponível em um banco de dados independente.

  • asn_encoded_certificate
    Bits de certificado codificado ASN especificados como uma constante binária.

  • BINARY =private_key_bits
    Bits de chave privada especificados como constante binária. Estes bits podem estar no formato criptografado. Se criptografado, o usuário deve fornecer uma senha de descriptografia. Verificações de diretiva de senha não são executadas nesta senha. Os bits de chave privada devem estar em um formato de arquivo PVK.

  • DECRYPTION BY PASSWORD ='key_password'
    Especifica a senha necessária para descriptografar uma chave privada 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 da política de senha do Windows do computador que está executando a instância do SQL Server. Para obter mais informações, consulte Política 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 4.096 bits. O comprimento de uma chave privada importada deve ser um número inteiro múltiplo de 64 bits. Certificados usados para TDE são limitados a um tamanho de chave privada de 3.456 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.

Uma descrição binária de um certificado pode ser criada usando as funções CERTENCODED (Transact-SQL) e CERTPRIVATEKEY (Transact-SQL). Para obter um exemplo que usa CERTPRIVATEKEY e CERTENCODED para copiar um certificado para outro banco de dados, consulte o exemplo B no tópico CERTENCODED (Transact-SQL).

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

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

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

Consulte também

Referência

ALTER CERTIFICATE (Transact-SQL)

DROP CERTIFICATE (Transact-SQL)

BACKUP CERTIFICATE (Transact-SQL)

EVENTDATA (Transact-SQL)

CERTENCODED (Transact-SQL)

CERTPRIVATEKEY (Transact-SQL)

Conceitos

Hierarquia de criptografia