CREATE CERTIFICATE (Transact-SQL)

Agrega un certificado a una base de datos.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

CREATE CERTIFICATE certificate_name [ AUTHORIZATION user_name ] 
    { FROM <existing_keys> | <generate_new_keys> }
    [ ACTIVE FOR BEGIN_DIALOG =  { ON | OFF } ]
        
<existing_keys> ::= 
    ASSEMBLY assembly_name
    | { 
        [ EXECUTABLE ] FILE ='path_to_file'
        [ WITH PRIVATE KEY ( <private_key_options> ) ] 
      }
        
<generate_new_keys> ::= 
    [ ENCRYPTION BY PASSWORD ='password'] 
    WITH SUBJECT ='certificate_subject_name' 
    [ , <date_options> [ ,...n ] ] 

<private_key_options> ::=
    FILE ='path_to_private_key'
    [ , DECRYPTION BY PASSWORD ='password' ]
    [ , ENCRYPTION BY PASSWORD ='password' ]  

<date_options> ::=
    START_DATE ='datetime' | EXPIRY_DATE ='datetime'

Argumentos

  • certificate_name
    Es el nombre por el que se conoce el certificado en la base de datos.

  • AUTHORIZATION user_name
    Es el nombre del usuario propietario del certificado.

  • ASSEMBLY assembly_name
    Especifica un ensamblado firmado que se ha cargado en la base de datos.

  • [ EXECUTABLE ] FILE ='path_to_file'
    Especifica la ruta completa, incluido el nombre de archivo, de acceso a un archivo codificado con DER que contiene el certificado. Si se utiliza la opción EXECUTABLE, el archivo es una DLL firmada por el certificado. path_to_file puede ser una ruta local o una ruta UNC a una ubicación de red. Se obtendrá acceso al archivo en el contexto de seguridad de la cuenta de servicio de SQL Server. Esta cuenta debe disponer de los necesarios permisos de sistema de archivos.

  • WITH PRIVATE KEY
    Especifica que la clave privada del certificado se ha cargado en SQL Server. Esta cláusula sólo es válida si se crea el certificado desde un archivo. Para cargar la clave privada de un ensamblado, utilice ALTER CERTIFICATE.

  • FILE ='path_to_private_key'
    Especifica la ruta completa, incluido el nombre de archivo, de acceso a la clave privada. path_to_private_key puede ser una ruta local o una ruta UNC a una ubicación de red. Se obtendrá acceso al archivo en el contexto de seguridad de la cuenta de servicio de SQL Server. Esta cuenta debe disponer de los necesarios permisos de sistema de archivos.

  • DECRYPTION BY PASSWORD = 'key_password'
    Especifica la contraseña necesaria para descifrar una clave privada recuperada de un archivo. La cláusula es opcional si la clave privada está protegida por una contraseña NULL. No se recomienda guardar una clave privada de un archivo sin protección de contraseña. Si no se especifica una contraseña requerida, la instrucción registrará errores.

  • ENCRYPTION BY PASSWORD ='password'
    Especifica la contraseña que se utilizará para cifrar la clave privada. Utilice esta opción sólo si desea cifrar el certificado con una contraseña. Si se omite esta cláusula, la clave privada se cifrará usando la clave maestra de la base de datos. password debe cumplir los requisitos de la directiva de contraseñas de Windows del equipo que ejecuta la instancia de SQL Server. Para obtener más información, vea Directiva de contraseñas.

  • SUBJECT = 'certificate_subject_name'
    El término subject se refiere a un campo en los metadatos del certificado según lo establecido en el estándar X.509. El asunto puede tener una longitud máxima de 128 caracteres. Los asuntos que superen 128 caracteres se truncarán al almacenarlos en el catálogo, pero el objeto binario grande (BLOB) que contiene el certificado conservará el nombre de asunto completo.

  • START_DATE ='datetime'
    Es la fecha en la que el certificado comienza a ser válido. Si no se especifica, START_DATE será la fecha actual. START_DATE se especifica en hora UTC y se puede especificar en cualquier formato que se pueda convertir a una fecha y hora.

  • EXPIRY_DATE ='datetime'
    Es la fecha en la que expira el certificado. Si no se especifica, EXPIRY_DATE será una fecha un año posterior a la indicada en START_DATE. EXPIRY_DATE se especifica en hora UTC y se puede especificar en cualquier formato que se pueda convertir a una fecha y hora. SQL Server Service Broker comprueba la fecha de expiración; sin embargo, no se exige la expiración cuando el certificado se utiliza para el cifrado.

  • ACTIVE FOR BEGIN_DIALOG = { ON | OFF }
    Hace que el certificado esté disponible para el iniciador de una conversación de diálogo de Service Broker. El valor predeterminado es ON.

Notas

Un certificado es un elemento que puede protegerse en el nivel de base de datos que sigue el estándar X.509 y admite los campos V1 de X.509. CREATE CERTIFICATE puede cargar un certificado desde un archivo o ensamblado. Esta instrucción también puede generar un par de claves y crear un certificado con firma personal.

Las claves privadas generadas por SQL Server tienen una longitud de 1024 bits. Las claves privadas importadas de un origen externo presentan una longitud mínima de 384 bits y una máxima de 3.456 bits. La longitud de una clave privada importada debe ser un entero múltiplo de 64 bits.

La clave privada debe corresponderse con la clave pública especificada por certificate_name.

Cuando se crea un certificado desde un contenedor, es opcional cargar la clave privada. Pero cuando SQL Server genera un certificado con firma personal, siempre se creará la clave privada. De manera predeterminada, la clave privada se cifra con la clave maestra de base de datos. Si no existe una clave maestra de base de datos y no se especifica una contraseña, la instrucción registrará errores.

No se requiere la opción ENCRYPTION BY PASSWORD si se cifra la clave privada con la clave maestra de base de datos. Utilice esta opción sólo si se cifra la clave privada con una contraseña. Si no se especifica una contraseña, la clave privada del certificado se cifrará con la clave maestra de base de datos. Al omitir esta cláusula se producirán errores si no se puede abrir la clave maestra de la base de datos.

No es necesario especificar una contraseña de descifrado si se cifra la clave privada con la clave maestra de base de datos.

[!NOTA]

Las funciones integradas para el cifrado y firma no comprueban las fechas de caducidad de los certificados. Los usuarios de estas funciones deben decidir cuándo comprobar la caducidad de los certificados.

Permisos

Requiere el permiso CREATE CERTIFICATE en la base de datos. 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 certificados. Los grupos y funciones no pueden poseer los certificados.

Ejemplos

A. Crear un certificado con firma personal

En el siguiente ejemplo se crea un certificado denominado Shipping04. La clave privada de este certificado está protegida con una contraseña.

USE AdventureWorks;
CREATE CERTIFICATE Shipping04 
   ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
   WITH SUBJECT = 'Sammamish Shipping Records', 
   EXPIRY_DATE = '10/31/2009';
GO

B. Crear un certificado desde un archivo

En el siguiente ejemplo se crea un certificado en la base de datos y se carga el par de claves desde los archivos.

USE AdventureWorks;
CREATE CERTIFICATE Shipping11 
    FROM FILE = 'c:\Shipping\Certs\Shipping11.cer' 
    WITH PRIVATE KEY (FILE = 'c:\Shipping\Certs\Shipping11.pvk', 
    DECRYPTION BY PASSWORD = 'sldkflk34et6gs%53#v00');
GO 

C. Crear un certificado desde un archivo ejecutable firmado

USE AdventureWorks;
CREATE CERTIFICATE Shipping19 
    FROM EXECUTABLE FILE = 'c:\Shipping\Certs\Shipping19.dll';
GO

Como alternativa, puede crear un ensamblado desde el archivo dll y crear un certificado desde el ensamblado.

USE AdventureWorks;
CREATE ASSEMBLY Shipping19 
    FROM ' c:\Shipping\Certs\Shipping19.dll' 
    WITH PERMISSION_SET = SAFE;
GO
CREATE CERTIFICATE Shipping19 FROM ASSEMBLY Shipping19;
GO