CREATE SYMMETRIC KEY (Transact-SQL)
Gera uma chave simétrica e especifica suas propriedades.
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.
Cuidado |
---|
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.
Importante |
---|
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 de Microsoft SQL Server. Não utilize esse recurso em desenvolvimentos novos e planeje modificar, 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