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 Banco de Dados SQL no Microsoft Fabric
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