CREATE SYMMETRIC KEY (Transact-SQL)

Syntax
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

Arguments
- Key_name
Specifies the unique name by which the symmetric key is known in the database. The names of temporary keys should begin with one number (#) sign. For example, #temporaryKey900007. You cannot create a symmetric key that has a name that starts with more than one #. You cannot create a temporary symmetric key using an EKM provider. - AUTHORIZATION owner_name
Specifies the name of the database user or application role that will own this key. - FROM PROVIDER Provider_Name
Specifies an Extensible Key Management (EKM) provider and name. The key is not exported from the EKM device. The provider must be defined first using the CREATE PROVIDER statement. For more information about creating external key providers, see Extensible Key Management (EKM). Note |
|---|
This option is not available in a contained database. |
- KEY_SOURCE ='pass_phrase'
Specifies a pass phrase from which to derive the key. - IDENTITY_VALUE ='identity_phrase'
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'
Specifies the name referenced in the Extensible Key Management provider. Note |
|---|
This option is not available in a contained database. |
- CREATION_DISPOSITION = CREATE_NEW
Creates a new key can on the Extensible Key Management device. If a key already exists on the device, the statement fails with error. - CREATION_DISPOSITION = OPEN_EXISTING
Maps a SQL Server symmetric key to an existing Extensible Key Management key. If CREATION_DISPOSITION = OPEN_EXISTING is not provided, this defaults to CREATE_NEW. - certificate_name
Specifies the name of the certificate that will be used to encrypt the symmetric key. The certificate must already exist in the database. - 'password'
Specifies a password from which to derive a TRIPLE_DES key with which to secure the symmetric key. password must meet the Windows password policy requirements of the computer that is running the instance of SQL Server. You should always use strong passwords. - symmetric_key_name
Specifies a symmetric key to be used to encrypt the key that is being created. The specified key must already exist in the database, and the key must be open. - asym_key_name
Specifies an asymmetric key to be used to encrypt the key that is being created. This asymmetric key must already exist in the database.

Remarks
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. The key can have more than one encryption of each type. In other words, a single symmetric key can be encrypted by using multiple certificates, passwords, symmetric keys, and asymmetric keys at the same time. Caution |
|---|
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. Because of this, keys that are created with a strong encryption algorithm, such as AES, are themselves secured by a weaker algorithm. |
The optional password can be used to encrypt the symmetric key before distributing the key to multiple users. Temporary keys are owned by the user that creates them. Temporary keys are only valid for the current session. IDENTITY_VALUE generates a GUID with which to tag data that is encrypted with the new symmetric key. This tagging can be used to match keys to encrypted data. The GUID generated by a specific phrase will always be the same. 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 is an optional clause; however, we recommend using it when you are storing data encrypted with a temporary key. There is no default encryption algorithm. Important |
|---|
We do not recommend using the RC4 and RC4_128 stream ciphers to protect sensitive data. SQL Server does not further encode the encryption performed with such keys. |
Information about symmetric keys is visible in the sys.symmetric_keys catalog view. Symmetric keys cannot be encrypted by symmetric keys created from the encryption provider. Clarification regarding DES algorithms: DESX was incorrectly named. Symmetric keys created with ALGORITHM = DESX actually use the TRIPLE DES cipher with a 192-bit key. The DESX algorithm is not provided. This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Symmetric keys created with ALGORITHM = TRIPLE_DES_3KEY use TRIPLE DES with a 192-bit key. Symmetric keys created with ALGORITHM = TRIPLE_DES use TRIPLE DES with a 128-bit key.
Deprecation of the RC4 algorithm: Repeated use of the same RC4 or RC4_128 KEY_GUID on different blocks of data will result in the same RC4 key because SQL Server does not provide a salt automatically. Using the same RC4 key repeatedly is a well known error that will result in very weak encryption. Therefore we have deprecated the RC4 and RC4_128 keywords. This feature will be removed in a future version of Microsoft SQL Server. Do not use this feature in new development work, and modify applications that currently use this feature as soon as possible. Caution |
|---|
The RC4 algorithm is only supported for backward compatibility. New material can only be encrypted using RC4 or RC4_128 when the database is in compatibility level 90 or 100. (Not recommended.) Use a newer algorithm such as one of the AES algorithms instead. In SQL Server 2012 material encrypted using RC4 or RC4_128 can be decrypted in any compatibility level. |

Permissions
Requires ALTER ANY SYMMETRIC KEY permission on the database. If AUTHORIZATION is specified, requires IMPERSONATE permission on the database user or ALTER permission on the application role. If encryption is by certificate or asymmetric key, requires VIEW DEFINITION permission on the certificate or asymmetric key. Only Windows logins, SQL Server logins, and application roles can own symmetric keys. Groups and roles cannot own symmetric keys.

Examples
A.Creating a symmetric keyThe 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.Creating a temporary symmetric keyThe 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. 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.Creating a symmetric key using an Extensible Key Management (EKM) deviceThe following example creates a symmetric key called MySymKey by using a provider called MyEKMProvider and a key name of KeyForSensitiveData. It assigns authorization to User1 and assumes that the system administrator has already registered the provider called MyEKMProvider in SQL Server.
CREATE SYMMETRIC KEY MySymKey
AUTHORIZATION User1
FROM PROVIDER EKMProvider
WITH
PROVIDER_KEY_NAME='KeyForSensitiveData',
CREATION_DISPOSITION=OPEN_EXISTING;
GO

See Also
|
CREATE SYMMETRIC KEY (Transact-SQL)

Sintaxis
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 el nombre único por el que se conoce la clave simétrica en la base de datos. Los nombres de estas tablas temporales empiezan por el signo de número (#). Por ejemplo, #temporaryKey900007. No se puede crear una clave simétrica que presente un nombre que comienza por más de un signo de número. No puede crear ninguna clave simétrica temporal mediante un proveedor EKM. - AUTHORIZATION owner_name
Especifica el nombre del usuario de la base de datos o el rol de aplicación que será propietario de la clave. - FROM PROVIDER Provider_Name
Especifica un nombre y proveedor de Administración extensible de claves (EKM). La clave no se exporta desde el dispositivo de EKM. El proveedor debe definirse antes mediante la instrucción CREATE PROVIDER. Para obtener más información sobre la creación de proveedores de clave externos, vea Administración extensible de claves (EKM). Nota |
|---|
Esta opción no está disponible en una base de datos independiente. |
- KEY_SOURCE ='pass_phrase'
Especifica una frase de contraseña a partir de la cual se derivará la clave. - IDENTITY_VALUE ='identity_phrase'
Especifica una frase de identidad a partir de la cual se generará una GUID para etiquetar los datos cifrados con una clave temporal. - PROVIDER_KEY_NAME='key_name_in_provider'
Especifica el nombre al que se hace referencia en el proveedor de Administración extensible de claves. Nota |
|---|
Esta opción no está disponible en una base de datos independiente. |
- CREATION_DISPOSITION = CREATE_NEW
Crea una nueva clave en el dispositivo de Administración extensible de claves. Si ya existe una clave en el dispositivo, se producirá un error en la instrucción. - CREATION_DISPOSITION = OPEN_EXISTING
Asigna una clave simétrica de SQL Server a una clave de Administración extensible de claves. Si no se proporciona CREATION_DISPOSITION = OPEN_EXISTING, de forma predeterminada es CREATE_NEW. - certificate_name
Especifica el nombre del certificado que se utilizará para cifrar la clave simétrica. El certificado debe existir en la base de datos. - 'password'
Especifica una contraseña de la que se deriva una clave TRIPLE_DES con la que se va a proteger la clave simétrica. password debe cumplir los requisitos de la directiva de contraseñas de Windows del equipo que ejecuta la instancia de SQL Server. Debe utilizar siempre contraseñas seguras. - symmetric_key_name
Especifica una clave simétrica que se utilizará para cifrar la clave que vaya a crear. La clave especificada debe existir en la base de datos y debe estar abierta. - asym_key_name
Especifica una clave asimétrica que se utilizará para cifrar la clave que vaya a crear. La clave asimétrica debe existir en la base de datos.

Comentarios
Cuando se crea una clave simétrica, se debe cifrar mediante uno de los siguientes métodos: certificado, contraseña, clave simétrica, clave asimétrica o PROVIDER. La clave puede tener más de un cifrado de cada tipo. En otras palabras, una misma clave simétrica puede cifrarse con varios certificados, contraseñas, claves simétricas y claves asimétricas a la vez. Advertencia |
|---|
Si se utiliza una contraseña para cifrar una clave simétrica, en lugar de la clave pública de la clave maestra de base de datos, se utiliza el algoritmo de cifrado TRIPLE DES. Por ello, las claves creadas con un algoritmo de cifrado seguro, como AES, se protegen mediante un algoritmo menos seguro. |
Puede utilizar la contraseña opcional para cifrar la clave simétrica antes de distribuir la clave a varios usuarios. Las claves temporales son propiedad del usuario que las creó. Las claves temporales son solo válidas para la sesión actual. IDENTITY_VALUE genera una GUID con la que se etiquetan los datos cifrados con la nueva clave simétrica. Este etiquetado puede utilizarse para asignar claves a datos cifrados. La GUID generada por una frase específica será siempre la misma. Si se utiliza una frase para generar un GUID, esta no se puede volver a utilizar mientras haya al menos una sesión que la esté usando activamente. IDENTITY_VALUE es una cláusula opcional; sin embargo, le recomendamos que la utilice para almacenar los datos cifrados con una clave temporal. No existe un algoritmo de cifrado predeterminado. Importante |
|---|
No se recomienda usar los cifrados de flujos RC4 y RC4_128 para proteger información confidencial. SQL Server no realiza ninguna codificación adicional al cifrado efectuado con estas claves. |
Puede ver la información acerca de las claves simétricas en la vista de catálogo sys.symmetric_keys. Las claves simétricas creadas a partir del proveedor de cifrado no pueden cifrar las claves simétricas. Clarificación con respecto a los algoritmos DES: DESX se denominó incorrectamente. Las claves simétricas creadas con ALGORITHM = DESX realmente utilizan el cifrado TRIPLE DES con una clave de 192 bits. No se proporciona el algoritmo DESX. Esta característica se quitará en una versión futura de Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. Las claves simétricas creadas con ALGORITHM = TRIPLE_DES_3KEY utilizan TRIPLE DES con una clave de 192 bits. Las claves simétricas creadas con ALGORITHM = TRIPLE_DES utilizan TRIPLE DES con una clave de 128 bits.
Degradación del algoritmo RC4: El uso repetido de la misma RC4 o RC4_128 KEY_GUID en bloques diferentes de datos producirá la misma clave RC4 porque SQL Server no proporciona un valor de salt automáticamente. El uso repetido de la misma clave RC4 es un error conocido que producirá un cifrado muy poco seguro. Por tanto, las palabras clave RC4_128 y RC4 están desusadas. Esta característica se quitará en una versión futura de Microsoft SQL Server. No utilice esta característica en nuevos trabajos de desarrollo y modifique lo antes posible las aplicaciones que actualmente la utilizan. Advertencia |
|---|
El algoritmo RC4 se admite solo por compatibilidad con versiones anteriores. El material nuevo solo se puede cifrar con RC4 o RC4_128 cuando la base de datos tenga el nivel de compatibilidad 90 o 100. (No se recomienda). Use un algoritmo más reciente como uno de los algoritmos AES en su lugar. En SQL Server 2012 el material cifrado con RC4 o RC4_128 se puede descifrar en cualquier nivel de compatibilidad. |

Permisos
Necesita el permiso ALTER ANY SYMMETRIC KEY para la base de datos. Si se especifica la cláusula AUTHORIZATION, es necesario el permiso IMPERSONATE para el usuario de base de datos o el permiso ALTER para el rol de aplicación. Si el cifrado se realiza mediante una clave asimétrica o un certificado, es necesario el permiso VIEW DEFINITION para el certificado o en la clave asimétrica. Solo los inicios de sesión de Windows, los inicios de sesión de SQL Server y los roles de aplicación pueden poseer claves simétricas. Los grupos y roles no pueden poseer claves simétricas.

Ejemplos
A.Crear una clave simétricaEn el siguiente ejemplo se crea una clave simétrica denominada JanainaKey09 mediante el algoritmo AES 256 y se cifra la nueva clave con el certificado Shipping04.
CREATE SYMMETRIC KEY JanainaKey09 WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE Shipping04;
GO
B.Crear una clave simétrica temporalEn el siguiente ejemplo se crea una clave simétrica temporal denominada #MarketingXXV a partir de la frase de contraseña: The square of the hypotenuse is equal to the sum of the squares of the sides. La clave se suministra con un GUID generado a partir de la cadena Pythagoras y se cifra con el 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.Crear una clave simétrica mediante un dispositivo de Administración extensible de claves (EKM)El ejemplo siguiente crea una clave simétrica llamada MySymKey mediante un proveedor llamado MyEKMProvider y un nombre de clave de KeyForSensitiveData. Asigna la autorización a User1 y se supone que el administrador del sistema ya ha registrado el proveedor llamado MyEKMProvider en SQL Server.
CREATE SYMMETRIC KEY MySymKey
AUTHORIZATION User1
FROM PROVIDER EKMProvider
WITH
PROVIDER_KEY_NAME='KeyForSensitiveData',
CREATION_DISPOSITION=OPEN_EXISTING;
GO

Vea también
|