CREATE SYMMETRIC KEY (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics

Gera uma chave simétrica e especifica suas propriedades 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 todas as chaves simétricas antes de exportar.

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

CREATE SYMMETRIC KEY key_name
    [ AUTHORIZATION owner_name ]
    [ FROM PROVIDER provider_name ]
    WITH
        [
            <key_options> [ , ... n ]
            | ENCRYPTION BY <encrypting_mechanism> [ , ... n ]
        ]

<key_options> ::=
    KEY_SOURCE = 'pass_phrase'
    | ALGORITHM = <algorithm>
    | IDENTITY_VALUE = 'identity_phrase'
    | PROVIDER_KEY_NAME = 'key_name_in_provider'
    | CREATION_DISPOSITION = { CREATE_NEW | OPEN_EXISTING }

<algorithm> ::=
    DES | TRIPLE_DES | TRIPLE_DES_3KEY | RC2 | RC4 | RC4_128
    | DESX | AES_128 | AES_192 | AES_256

<encrypting_mechanism> ::=
    CERTIFICATE certificate_name
    | PASSWORD = 'password'
    | SYMMETRIC KEY symmetric_key_name
    | ASYMMETRIC KEY asym_key_name

Argumentos

key_name

Especifica o nome exclusivo pelo qual a chave simétrica é conhecida no banco de dados. Esse é um parâmetro necessário. Chaves temporárias são designadas quando key_name começa com um sinal de número (#). Por exemplo, #temporaryKey900007. Você não pode criar uma chave simétrica que tenha um nome que inicie com mais que um #. Não é possível criar uma chave simétrica temporária usando um provedor EKM.

AUTHORIZATION owner_name

Especifica o nome do usuário do banco de dados ou função de aplicativo que possui essa chave.

FROM PROVIDER provider_name

Especifica um nome e provedor de gerenciamento extensível de chaves (EKM). A chave não é exportada do dispositivo de EKM. O provedor deve ser definido primeiro com o uso da instrução CREATE PROVIDER. Para obter mais informações sobre como criar provedores de chave externa, confira Gerenciamento extensível de chaves (EKM).

Observação

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

KEY_SOURCE = 'pass_phrase'

Especifica uma frase secreta da qual a chave deve derivar.

IDENTITY_VALUE = 'identity_phrase'

Especifica uma frase de identidade a partir da qual deve ser gerado um GUID para marcar dados criptografados com uma chave temporária.

PROVIDER_KEY_NAME = 'key_name_in_provider'

Especifica o nome mencionado no provedor de Gerenciamento Extensível de Chaves.

Observação

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

CREATION_DISPOSITION = { CREATE_NEW | OPEN_EXISTING }

Cria ou mapeia uma chave simétrica para um dispositivo de gerenciamento extensível de chaves.

  • CREATE_NEW

    Cria uma chave nova no dispositivo de Gerenciamento Extensível de Chaves. Se já existir uma chave no dispositivo, a instrução falhará com erro.

  • OPEN_EXISTING

    Mapeia uma chave simétrica do SQL Server para uma chave de Gerenciamento Extensível de Chaves existente. Se CREATION_DISPOSITION = OPEN_EXISTING não for fornecido, usará CREATE_NEW como padrão.

certificate_name

Especifica o nome do certificado que é usado para criptografar a chave simétrica. O certificado já deve existir no banco de dados.

'password'

Especifica uma senha da qual derivar uma chave TRIPLE_DES para proteger a chave simétrica. A password deve atender aos requisitos da política de senha do Windows do computador que executa a instância do SQL Server. Sempre use senhas fortes.

symmetric_key_name

Especifica uma chave simétrica usada para criptografar a chave que está sendo criada. A chave especificada já deve existir no banco de dados e deve estar aberta.

asym_key_name

Especifica uma chave assimétrica usada para criptografar a chave que está sendo criada. Essa chave assimétrica já deve existir no banco de dados.

<algorithm>

Especifique o algoritmo de criptografia.

Aviso

A partir do SQL Server 2016 (13.x), todos os algoritmos, exceto AES_128, AES_192 e AES_256, foram preteridos. Para usar algoritmos mais antigos (não recomendado), você deve definir o nível de compatibilidade do banco de dados para 120 ou menos.

Comentários

Quando uma chave simétrica é criada, esta deve ser criptografada usando pelo menos uma das seguintes opções:

  • certificate
  • password
  • chave simétrica
  • chave assimétrica
  • PROVEDOR

A chave pode ter mais de uma criptografia de cada tipo. Em outras palavras, uma única chave simétrica pode ser criptografada com o uso de vários certificados, senhas, chaves simétricas e chaves assimétricas ao mesmo tempo.

Cuidado

Quando uma chave simétrica é criptografada com uma senha, em vez de um certificado (ou outra chave), o algoritmo de criptografia TRIPLE DES é usado para criptografar a senha. Por esse motivo, as chaves criadas com um algoritmo de criptografia forte, como AES, são protegidas por um algoritmo mais fraco.

A senha opcional pode ser usada para criptografar a chave simétrica antes de distribuir a chave a vários usuários.

Chaves temporárias são de propriedade do usuário que as cria. Elas só são válidas para a sessão atual.

IDENTITY_VALUE gera um GUID com o qual os dados criptografados com a nova chave simétrica devem ser marcados. Essa marcação pode ser usada para corresponder chaves a dados criptografados. O GUID gerado por uma frase específica é sempre o mesmo. Após uma frase ter sido usada para gerar um GUID, ela não poderá ser reutilizada, a menos que haja pelo menos uma chave simétrica nesse banco de dados usando ativamente a frase. IDENTITY_VALUE é uma cláusula opcional; entretanto, recomendamos usá-la ao armazenar dados criptografados com uma chave temporária.

Não há nenhum algoritmo de criptografia padrão.

Importante

Não recomendamos usar as codificações de fluxo RC4 e RC4_128 para proteger dados confidenciais. O SQL Server não codifica adicionalmente a criptografia executada com essas chaves.

As informações sobre chaves simétricas podem ser visualizadas na exibição do catálogo sys.symmetric_keys.

As chaves simétricas não podem ser criptografadas por chaves simétricas criadas no provedor de criptografia.

Esclarecimento em relação aos algoritmos DES

  • O DESX foi nomeado incorretamente. As chaves simétricas criadas com ALGORITHM = DESX na verdade usam a cifra TRIPLE DES com uma chave de 192 bits. O algoritmo DESX não é fornecido. Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam.
  • As chaves simétricas criadas com ALGORITHM = TRIPLE_DES_3KEY usam TRIPLE DES com uma chave de 192 bits.
  • As chaves simétricas criadas com ALGORITHM = TRIPLE_DES usam TRIPLE DES com uma chave de 128 bits.

Reprovação do algoritmo RC4

O uso repetido do mesmo RC4 ou RC4_128 KEY_GUID em blocos de dados diferentes resulta na mesma chave RC4 porque o SQL Server não fornece um sal automaticamente. O uso da mesma chave RC4 repetidamente é um erro bem conhecido que resulta em criptografia muito fraca. Portanto preterimos as palavras-chave RC4 e RC4_128. Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam.

Aviso

O algoritmo RC4 tem suporte somente para compatibilidade com versões anteriores. O novo material só pode ser criptografado por meio do algoritmo RC4 ou RC4_128 quando o banco de dados está no nível de compatibilidade 90 ou 100. (Não recomendável.) Use um algoritmo mais recente; por exemplo, um dos algoritmos AES. No SQL Server, o material criptografado por meio do algoritmo RC4 ou RC4_128 pode ser descriptografado em qualquer nível de compatibilidade.

Permissões

Requer permissão ALTER ANY SYMMETRIC KEY no banco de dados. Se AUTHORIZATION for especificada, será necessária a permissão IMPERSONATE no usuário de banco de dados ou a permissão ALTER na função de aplicativo. Se a criptografia for por certificado ou chave assimétrica, exigirá a permissão VIEW DEFINITION no certificado ou na chave assimétrica. Somente logons do Windows, logons do SQL Server e funções de aplicativo podem ter chaves simétricas. Grupos e funções não podem possuir chaves simétricas.

Exemplos

R. Criar uma chave simétrica

O exemplo a seguir cria uma chave simétrica denominada JanainaKey09 usando o algoritmo AES 256 e criptografa a nova chave com o certificado Shipping04.

CREATE SYMMETRIC KEY JanainaKey09
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE Shipping04;
GO

B. Criar uma chave simétrica temporária

O exemplo seguinte cria uma chave simétrica temporária chamada #MarketingXXV na frase secreta: The square of the hypotenuse is equal to the sum of the squares of the sides. A chave é fornecida com um GUID gerado na cadeia de caracteres Pythagoras e criptografado com o certificado Marketing25.

CREATE SYMMETRIC KEY #MarketingXXV
WITH ALGORITHM = AES_128,
KEY_SOURCE
     = 'The square of the hypotenuse is equal to the sum of the squares of the sides',
IDENTITY_VALUE = 'Pythagoras'
ENCRYPTION BY CERTIFICATE Marketing25;
GO

C. Criar uma chave simétrica com um dispositivo EKM (Extensible Key Management, Gerenciamento extensível de chaves)

O exemplo a seguir cria uma chave simétrica chamada MySymKey usando um provedor chamado MyEKMProvider e um nome de chave KeyForSensitiveData. Ele atribui a autorização ao User1 e pressupõe que o administrador de sistema já registrou o provedor denominado MyEKMProvider no SQL Server.

CREATE SYMMETRIC KEY MySymKey
AUTHORIZATION User1
FROM PROVIDER EKMProvider
WITH
PROVIDER_KEY_NAME='KeyForSensitiveData',
CREATION_DISPOSITION=OPEN_EXISTING;
GO

Confira também