CREATE SYMMETRIC KEY (Transact-SQL)CREATE SYMMETRIC KEY (Transact-SQL)

ESTE TÓPICO APLICA-SE A:simSQL Server (a partir de 2008)simBanco de Dados SQL do Microsoft AzurenãoAzure SQL Data Warehouse nãoParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Gera uma chave simétrica e especifica suas propriedades no SQL ServerSQL Server.Generates a symmetric key and specifies its properties in SQL ServerSQL Server.

Este recurso é incompatível com a exportação de banco de dados usando a DACFx (estrutura de aplicativo da camada de dados).This feature is incompatible with database export using Data Tier Application Framework (DACFx). Você deve remover todas as chaves simétricas antes de exportar.You must drop all symmetric keys before exporting.

Ícone de link do tópico Convenções da sintaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

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  

ArgumentosArguments

Key_nameKey_name
Especifica o nome exclusivo pelo qual a chave simétrica é conhecida no banco de dados.Specifies the unique name by which the symmetric key is known in the database. Os nomes de chaves temporárias devem começar com um símbolo de número (#).The names of temporary keys should begin with one number (#) sign. Por exemplo, #temporaryKey900007.For example, #temporaryKey900007. Você não pode criar uma chave simétrica que tenha um nome que inicie com mais que um #.You cannot create a symmetric key that has a name that starts with more than one #. Não é possível criar uma chave simétrica temporária usando um provedor EKM.You cannot create a temporary symmetric key using an EKM provider.

AUTORIZAÇÃO owner_nameAUTHORIZATION owner_name
Especifica o nome do usuário do banco de dados ou função de aplicativo que possuirá essa chave.Specifies the name of the database user or application role that will own this key.

DO provedor provider_nameFROM PROVIDER provider_name
Especifica um nome e provedor de gerenciamento extensível de chaves (EKM).Specifies an Extensible Key Management (EKM) provider and name. A chave não é exportada do dispositivo de EKM.The key is not exported from the EKM device. O provedor deve ser definido primeiro com o uso da instrução CREATE PROVIDER.The provider must be defined first using the CREATE PROVIDER statement. Para obter mais informações sobre como criar provedores de chave externos, consulte gerenciamento extensível de chaves ( EKM ) .For more information about creating external key providers, see Extensible Key Management (EKM).

Observação

Essa opção não está disponível em um banco de dados independente.This option is not available in a contained database.

KEY_SOURCE ='pass_phrase'KEY_SOURCE ='pass_phrase'
Especifica uma frase secreta da qual a chave deve derivar.Specifies a pass phrase from which to derive the key.

IDENTITY_VALUE ='identity_phrase'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.Specifies an identity phrase from which to generate a GUID for tagging data that is encrypted with a temporary key.

PROVIDER_KEY_NAME='key_name_in_provider'PROVIDER_KEY_NAME='key_name_in_provider'
Especifica o nome mencionado no provedor de Gerenciamento Extensível de Chaves.Specifies the name referenced in the Extensible Key Management provider.

Observação

Essa opção não está disponível em um banco de dados independente.This option is not available in a contained database.

CREATION_DISPOSITION ** = ** CREATE_NEWCREATION_DISPOSITION = CREATE_NEW
Cria uma chave nova no dispositivo de Gerenciamento Extensível de Chaves.Creates a new key on the Extensible Key Management device. Se já existir uma chave no dispositivo, a instrução falhará com erro.If a key already exists on the device, the statement fails with error.

CREATION_DISPOSITION ** = ** OPEN_EXISTINGCREATION_DISPOSITION = OPEN_EXISTING
Mapeia uma chave simétrica do SQL ServerSQL Server para uma chave de gerenciamento extensível de chaves existente.Maps a SQL ServerSQL Server symmetric key to an existing Extensible Key Management key. Se CREATION_DISPOSITION = OPEN_EXISTING não for fornecido, isso será padronizado como CREATE_NEW.If CREATION_DISPOSITION = OPEN_EXISTING is not provided, this defaults to CREATE_NEW.

certificate_namecertificate_name
Especifica o nome do certificado que será usado para criptografar a chave simétrica.Specifies the name of the certificate that will be used to encrypt the symmetric key. O certificado já deve existir no banco de dados.The certificate must already exist in the database.

' senha '' password '
Especifica uma senha da qual derivar uma chave TRIPLE_DES para proteger a chave simétrica.Specifies a password from which to derive a TRIPLE_DES key with which to secure the symmetric key. senha devem atender aos requisitos da política de senha do Windows do computador que está executando a instância de SQL ServerSQL Server.password must meet the Windows password policy requirements of the computer that is running the instance of SQL ServerSQL Server. Sempre use senhas fortes.Always use strong passwords.

symmetric_key_namesymmetric_key_name
Especifica uma chave simétrica usada para criptografar a chave que está sendo criada.Specifies a symmetric key, used to encrypt the key that is being created. A chave especificada já deve existir no banco de dados e deve estar aberta.The specified key must already exist in the database, and the key must be open.

asym_key_nameasym_key_name
Especifica uma chave assimétrica usada para criptografar a chave que está sendo criada.Specifies an asymmetric key, used to encrypt the key that is being created. Essa chave assimétrica já deve existir no banco de dados.This asymmetric key must already exist in the database.

<algoritmo ><algorithm>
Especifique o algoritmo de criptografia.Specify the encrypting algorithm.

Aviso

A partir do SQL Server 2016SQL Server 2016, todos os algoritmos, exceto AES_128, AES_192 e AES_256, foram preteridos.Beginning with SQL Server 2016SQL Server 2016, all algorithms other than AES_128, AES_192, and AES_256 are deprecated. Para usar algoritmos mais antigos (não recomendados), você deve definir o nível de compatibilidade do banco de dados no banco de dados 120 ou inferior.To use older algorithms (not recommended), you must set the database to database compatibility level 120 or lower.

ComentáriosRemarks

Quando uma chave simétrica é criada, a chave simétrica deve ser criptografada usando pelo menos um dos seguintes: senha, certificado, chave simétrica, chave assimétrica ou provedor.When a symmetric key is created, the symmetric key must be encrypted by using at least one of the following: certificate, password, symmetric key, asymmetric key, or PROVIDER. A chave pode ter mais de uma criptografia de cada tipo.The key can have more than one encryption of each type. 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.In other words, a single symmetric key can be encrypted by using multiple certificates, passwords, symmetric keys, and asymmetric keys at the same time.

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.When a symmetric key is encrypted with a password instead of the public key of the database master key, the TRIPLE DES encryption algorithm is used. Por esse motivo, as chaves criadas com um algoritmo de criptografia forte, como AES, são protegidas por um algoritmo mais fraco.Because of this, keys that are created with a strong encryption algorithm, such as AES, are themselves secured by a weaker algorithm.

A senha opcional pode ser usada para criptografar a chave simétrica antes de distribuir a chave a vários usuários.The optional password can be used to encrypt the symmetric key before distributing the key to multiple users.

Chaves temporárias são de propriedade do usuário que as cria.Temporary keys are owned by the user that creates them. Elas só são válidas para a sessão atual.Temporary keys are only valid for the current session.

IDENTITY_VALUE gera um GUID com o qual os dados criptografados com a nova chave simétrica devem ser marcados.IDENTITY_VALUE generates a GUID with which to tag data that is encrypted with the new symmetric key. Essa marcação pode ser usada para corresponder chaves a dados criptografados.This tagging can be used to match keys to encrypted data. O GUID gerado por uma frase específica é sempre o mesmo.The GUID generated by a specific phrase is always the same. 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.After a phrase has been used to generate a GUID, the phrase cannot be reused as long as there is at least one session that is actively using the phrase. IDENTITY_VALUE é uma cláusula opcional; entretanto, recomendamos usá-la ao armazenar dados criptografados com uma chave temporária.IDENTITY_VALUE is an optional clause; however, we recommend using it when you are storing data encrypted with a temporary key.

Não há nenhum algoritmo de criptografia padrão.There is no default encryption algorithm.

Importante

Não recomendamos usar as codificações de fluxo RC4 e RC4_128 para proteger dados confidenciais.We do not recommend using the RC4 and RC4_128 stream ciphers to protect sensitive data. O SQL ServerSQL Server não codifica adicionalmente a criptografia executada com essas chaves. SQL ServerSQL Server does not further encode the encryption performed with such keys.

Informações sobre chaves simétricas são visíveis no symmetric_keys exibição do catálogo.Information about symmetric keys is visible in the sys.symmetric_keys catalog view.

As chaves simétricas não podem ser criptografadas por chaves simétricas criadas no provedor de criptografia.Symmetric keys cannot be encrypted by symmetric keys created from the encryption provider.

Esclarecimento em relação aos algoritmos DES:Clarification regarding DES algorithms:

  • O DESX foi nomeado incorretamente.DESX was incorrectly named. As chaves simétricas criadas com ALGORITHM = DESX na verdade usam a cifra TRIPLE DES com uma chave de 192 bits.Symmetric keys created with ALGORITHM = DESX actually use the TRIPLE DES cipher with a 192-bit key. O algoritmo DESX não é fornecido.The DESX algorithm is not provided. Esse recurso será removido em uma versão futura do Microsoft SQL Server.This feature will be removed in a future version of Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.
  • As chaves simétricas criadas com ALGORITHM = TRIPLE_DES_3KEY usam TRIPLE DES com uma chave de 192 bits.Symmetric keys created with ALGORITHM = TRIPLE_DES_3KEY use TRIPLE DES with a 192-bit key.
  • As chaves simétricas criadas com ALGORITHM = TRIPLE_DES usam TRIPLE DES com uma chave de 128 bits.Symmetric keys created with ALGORITHM = TRIPLE_DES use TRIPLE DES with a 128-bit key.

    Substituição do algoritmo RC4:Deprecation of the RC4 algorithm:

    Uso repetido do mesmo RC4 ou RC4_128 KEY_GUID em blocos de dados diferentes resulta na mesma chave RC4 porque SQL ServerSQL Server não fornece um salt automaticamente.Repeated use of the same RC4 or RC4_128 KEY_GUID on different blocks of data, results in the same RC4 key because SQL ServerSQL Server does not provide a salt automatically. O uso da mesma chave RC4 repetidamente é um erro bem conhecido que resulta em criptografia muito fraca.Using the same RC4 key repeatedly is a well known error that will result in very weak encryption. Portanto preterimos as palavras-chave RC4 e RC4_128.Therefore we have deprecated the RC4 and RC4_128 keywords. Esse recurso será removido em uma versão futura do Microsoft SQL Server.This feature will be removed in a future version of Microsoft SQL Server. Não utilize esse recurso em desenvolvimentos novos e modifique, assim que possível, os aplicativos que atualmente o utilizam.Do not use this feature in new development work, and modify applications that currently use this feature as soon as possible.

Aviso

O algoritmo RC4 tem suporte somente para compatibilidade com versões anteriores.The RC4 algorithm is only supported for backward compatibility. 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.New material can only be encrypted using RC4 or RC4_128 when the database is in compatibility level 90 or 100. (Não recomendável.) Use um algoritmo mais recente; por exemplo, um dos algoritmos AES.(Not recommended.) Use a newer algorithm such as one of the AES algorithms instead. No SQL Server 2017SQL Server 2017, o material criptografado por meio do algoritmo RC4 ou RC4_128 pode ser descriptografado em qualquer nível de compatibilidade.In SQL Server 2017SQL Server 2017 material encrypted using RC4 or RC4_128 can be decrypted in any compatibility level.

PermissõesPermissions

Requer permissão ALTER ANY SYMMETRIC KEY no banco de dados.Requires ALTER ANY SYMMETRIC KEY permission on the database. 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.If AUTHORIZATION is specified, requires IMPERSONATE permission on the database user or ALTER permission on the application role. Se a criptografia for por certificado ou chave assimétrica, exigirá a permissão VIEW DEFINITION no certificado ou na chave assimétrica.If encryption is by certificate or asymmetric key, requires VIEW DEFINITION permission on the certificate or asymmetric key. Somente logons do Windows, logons do SQL ServerSQL Server e funções de aplicativo podem ter chaves simétricas.Only Windows logins, SQL ServerSQL Server logins, and application roles can own symmetric keys. Grupos e funções não podem possuir chaves simétricas.Groups and roles cannot own symmetric keys.

ExemplosExamples

A.A. Criando uma chave simétricaCreating a symmetric key

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.The following example creates a symmetric key called JanainaKey09 by using the AES 256 algorithm, and then encrypts the new key with certificate Shipping04.

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

B.B. Criando uma chave simétrica temporáriaCreating a temporary symmetric key

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.The following example creates a temporary symmetric key called #MarketingXXV from the pass phrase: 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.The key is provisioned with a GUID that is generated from the string Pythagoras and encrypted with certificate 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.C. Criando uma chave simétrica com um dispositivo EKM (Extensible Key Management, Gerenciamento extensível de chaves)Creating a symmetric key using an Extensible Key Management (EKM) device

O exemplo seguinte cria uma chave simétrica denominada MySymKey usando um provedor chamado MyEKMProvider e um nome de chave KeyForSensitiveData.The following example creates a symmetric key called MySymKey by using a provider called MyEKMProvider and a key name of KeyForSensitiveData. Ele atribui a autorização ao User1 e pressupõe que o administrador de sistema já registrou o provedor denominado MyEKMProvider no SQL ServerSQL Server.It assigns authorization to User1 and assumes that the system administrator has already registered the provider called MyEKMProvider in SQL ServerSQL Server.

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

Consulte tambémSee Also

Escolher um algoritmo de criptografia Choose an Encryption Algorithm
ALTER SYMMETRIC KEY (Transact-SQL) ALTER SYMMETRIC KEY (Transact-SQL)
DROP SYMMETRIC KEY (Transact-SQL) DROP SYMMETRIC KEY (Transact-SQL)
Hierarquia de criptografia Encryption Hierarchy
symmetric_keys ( Transact-SQL ) sys.symmetric_keys (Transact-SQL)
Gerenciamento Extensível de Chaves (EKM) Extensible Key Management (EKM)
Gerenciamento extensível de chaves usando o Cofre de Chaves do Azure (SQL Server)Extensible Key Management Using Azure Key Vault (SQL Server)