CREATE SYMMETRIC KEY (Transact-SQL)

Gera uma chave simétrica e especifica suas propriedades.

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

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. Os nomes de chaves temporárias devem começar com um símbolo 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 possuirá 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 externos, consulte Compreendendo o EKM (Gerenciador de Chave Extensível).

  • KEY_SOURCE ='pass_phrase'
    Especifica uma frase de passagem 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.

  • key_name_in_provider
    Especifica o nome mencionado no provedor de gerenciamento extensível de chaves.

  • CREATION_DISPOSITION = 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.

  • CREATION_DISPOSITION = 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, isso será padronizado como CREATE_NEW.

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

  • 'password'
    Especifica uma senha da qual deve derivar uma chave TRIPLE_DES com a qual a chave simétrica deve ser protegida. A password deve atender aos requisitos da diretiva de senha do Windows do computador que está executando a instância do SQL Server. Você sempre deve usar senhas fortes.

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

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

Comentários

Quando uma chave simétrica é criada, ela deve ser criptografada usando pelo menos um dos seguintes: certificado, senha, chave simétrica, chave assimétrica ou PROVIDER. 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.

Observação sobre cuidadosCuidado

Quando uma chave simétrica é criptografada com uma senha e não com a chave pública da chave mestre do banco de dados, o algoritmo de criptografia TRIPLE DES é usado. 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 será 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 sessão 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.

Observação importanteImportante

Não recomendamos usar as codificações de fluxo RC4 e RC4_128 para proteger dados confidenciais. O SQL Server não codifica mais a criptografia feita 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 Microsoft 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 resultam na mesma chave RC4 porque o SQL Server não fornece um salt 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 Microsoft SQL Server. Não utilize esse recurso em desenvolvimentos novos e modifique, assim que possível, os aplicativos que atualmente o utilizam.

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 possuir chaves simétricas. Grupos e funções não podem possuir chaves simétricas.

Exemplos

A. Criando 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. Criando uma chave simétrica temporária

O exemplo seguinte cria uma chave simétrica temporária chamada #MarketingXXV na frase de passagem: 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. Criando uma chave simétrica usando um dispositivo de gerenciamento extensível de chaves (EKM)

O exemplo seguinte cria uma chave simétrica denominada 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