CREATE CERTIFICATE (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse Analytics

Adiciona um certificado a um banco de dados no SQL Server.

Este recurso é incompatível com a exportação de banco de dados usando a DACFx (estrutura de aplicativo da camada de dados). Você deve remover todos os certificados antes de exportar.

Observação

No SQL Server 2022 (16.x), é possível fazer backup ou restauração dos certificados com chaves privadas diretamente em arquivos ou blobs binários usando o formato PKCS (pares de chave pública) nº 12 ou PFX (troca de informações pessoais). Todos os certificados gerados pelo sistema têm uma força mínima de RSA-3072 no SQL Server 2022 (16.x).

O formato PKCS nº 12 ou PFX é um formato binário para armazenar o certificado do servidor, outros certificados intermediários e a chave privada em um arquivo. Os arquivos PFX geralmente têm extensões como .pfx e .p12. Isso facilita para que os clientes sigam as diretrizes atuais de práticas recomendadas de segurança e os padrões de conformidade que proíbem a criptografia RC4, eliminando a necessidade de usar ferramentas de conversão, como PVKConverter (para o formato PVK ou DER).

Convenções de sintaxe de Transact-SQL

Observação

Não há suporte a essa sintaxe para o pool de SQL sem servidor no Azure Synapse Analytics.

Sintaxe

-- Syntax for SQL Server and Azure SQL Database  
  
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 [FORMAT = 'PFX',]
          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'  
-- Syntax for Parallel Data Warehouse  
  
CREATE CERTIFICATE certificate_name   
    { <generate_new_keys> | FROM <existing_keys> }  
    [ ; ]  
  
<generate_new_keys> ::=   
    WITH SUBJECT = 'certificate_subject_name'   
    [ , <date_options> [ ,...n ] ]   
  
<existing_keys> ::=   
    {   
      FILE ='path_to_file'  
      WITH PRIVATE KEY   
         (   
           FILE = 'path_to_private_key'  
           , DECRYPTION BY PASSWORD ='password'   
         )  
    }  
  
<date_options> ::=  
    START_DATE ='datetime' | EXPIRY_DATE ='datetime'  

Observação

Para exibir a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.

Argumentos

certificate_name
É o nome do certificado no banco de dados.

AUTHORIZATION user_name
É o nome do usuário que é o 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 é 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.

Importante

O Banco de Dados SQL do Azure não é compatível com a criação de um certificado com base em um arquivo ou usando arquivos de chave privada.

BINARY = asn_encoded_certificate
Bytes de certificado codificado ASN especificados como uma constante binária.
Aplica-se a: SQL Server 2012 (11.x) e posterior.

WITH FORMAT = 'PFX'
Aplica-se a: SQL Server 2022 (16.x) e versões posteriores
Especifica a geração de um certificado por meio de um arquivo PFX. Esta cláusula é opcional.

WITH PRIVATE KEY
Especifica que a chave privada do certificado foi carregada no SQL Server. Essa cláusula é inválida quando o certificado é criado com base em um assembly. Para carregar a chave privada de um certificado criado 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 é 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.

Importante

Essa opção não está disponível em um banco de dados independente ou em Banco de Dados SQL do Azure.

BINARY = private_key_bits
Aplica-se ao: SQL Server (Começando pelo SQL Server 2012 (11.x)) e Banco de Dados SQL do Azure.

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. As verificações de política 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 é recomendado 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 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 executa a instância do SQL Server. Para obter mais informações, consulte Password Policy.

SUBJECT = 'certificate_subject_name'
O termo subject refere-se a um campo nos metadados do certificado conforme definido pelo padrão X.509. O assunto não deve ter mais do que 64 caracteres, e esse limite é aplicado para SQL Server no Linux. Para SQL Server no Windows, a entidade pode ter até 128 caracteres. As entidades que excedem 128 caracteres são truncadas ao serem armazenadas no catálogo, mas o BLOB (objeto binário grande) que contém o certificado mantém o nome completo da entidade.

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 Service Broker SQL Server verifica a data de expiração. O backup com criptografia usando certificados também verifica a data de validade e não permite que um novo backup seja criado com um certificado expirado, mas permite as restaurações com um certificado expirado. No entanto, a expiração não é imposta quando o certificado é usado para criptografia de banco de dados ou Always Encrypted.

ACTIVE FOR BEGIN_DIALOG = { ON | OFF }
Disponibiliza o certificado para o iniciador de uma conversa de caixa de diálogo do Agente de Serviço. 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, uma constante binária ou um assembly. Essa instrução também pode gerar um par de chaves e criar um certificado autoassinado.

A Chave Privada deve ser <= 2.500 bytes em formato criptografado. Chaves privadas geradas por SQL Server têm 1.024 bits de extensão até SQL Server 2014 (12.x) e 2.048 bits de extensão começando com SQL Server 2016 (13.x). 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 privado de 3456 bits.

Todo o Número de Série do certificado é armazenado, mas somente os primeiros 16 bytes aparecem na exibição do catálogo sys.certificates.

Todo o campo do Emissor do certificado é armazenado, mas somente os primeiros bytes 884 na exibição de catálogo sys.certificates.

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. A omissão dessa 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 é criptografada com a chave mestra do banco de dados.

Observaçã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 use CERTPRIVATEKEY e CERTENCODED para copiar um certificado para outro banco de dados, confira o exemplo B no artigo CERTENCODED (Transact-SQL).

Os algoritmos MD2, MD4, MD5, SHA e SHA1 foram preteridos no SQL Server 2016 (13.x). Até o SQL Server 2016 (13.x), um certificado autoassinado é criado usando SHA1. Do SQL Server 2017 (14.x) em diante, um certificado autoassinado é criado usando SHA2_256.

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 ter certificados. Grupos e funções não podem ter 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.

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

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   

Importante

Banco de Dados SQL do Azure não é compatível com a criação de um certificado com base em um arquivo.

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

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.

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

Importante

Banco de Dados SQL do Azure não é compatível com a criação de um certificado com base em um arquivo.

Importante

Do SQL Server 2017 (14.x) em diante, a opção de configuração de servidor 'segurança estrita do CLR' impede o carregamento assemblies sem primeiro configurar a segurança para eles. Carregue o certificado, crie um logon com base nele, conceda UNSAFE ASSEMBLY para esse logon e, em seguida, carregue o assembly.

D. Criando um certificado autoassinado

O exemplo a seguir cria um certificado chamado Shipping04 sem especificar uma senha de criptografia. Este exemplo pode ser usado com PDW (Analytics Platform System).

CREATE CERTIFICATE Shipping04   
   WITH SUBJECT = 'Sammamish Shipping Records';  
GO  

E. Criar um certificado por meio de um PFX

CREATE CERTIFICATE Shipping04
    FROM FILE = 'c:\storedcerts\shipping04cert.pfx'
    WITH 
    FORMAT = 'PFX', 
	PRIVATE KEY (
        DECRYPTION BY PASSWORD = '9n34khUbhk$w4ecJH5gh'
	);  

Consulte Também

ALTER CERTIFICATE (Transact-SQL)
DROP CERTIFICATE (Transact-SQL)
BACKUP CERTIFICATE (Transact-SQL)
Hierarquia de criptografia
EVENTDATA (Transact-SQL)
CERTENCODED (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)
CERT_ID (Transact-SQL)
CERTPROPERTY (Transact-SQL)