CREATE SYMMETRIC KEY (Transact-SQL)
Genera una clave simétrica y especifica sus propiedades.
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 base de datos o función 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 Descripción de la Administración extensible de claves (EKM).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.key_name_in_provider
Especifica el nombre al que se hace referencia en el proveedor de Administración extensible de claves.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 desde la que se deriva una clave TRIPLE_DES con la que 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.
Notas
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 sólo 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 es recomendable utilizar los cifrados de secuencias RC4 y RC4_128 para proteger datos confidenciales. SQL Server no realiza ninguna codificación adicional al cifrado realizado 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 consiguiente, las palabras clave RC4_128 y RC4 han quedado obsoletas. 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.
Permisos
Requiere el permiso ALTER ANY SYMMETRIC KEY en la base de datos. Si se especifica la cláusula AUTHORIZATION, es necesario el permiso IMPERSONATE en el usuario de base de datos o el permiso ALTER en la función de aplicación. Si el cifrado se realiza mediante una clave asimétrica o un certificado, es necesario el permiso VIEW DEFINITION en el certificado o en la clave asimétrica. Sólo los inicios de sesión de Windows, los inicios de sesión de SQL Server y las funciones de aplicación pueden poseer claves simétricas. Los grupos y funciones no pueden poseer claves simétricas.
Ejemplos
A. Crear una clave simétrica
En 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 temporal
En 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