CREATE CERTIFICATE (Transact-SQL)CREATE CERTIFICATE (Transact-SQL)

SE APLICA A: síSQL Server síAzure SQL Database noAzure SQL Data Warehouse síAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse yesParallel Data Warehouse

Agrega un certificado a una base de datos en SQL ServerSQL Server.Adds a certificate to a database in SQL ServerSQL Server.

Esta función no es compatible con la exportación de la base de datos con el Marco de trabajo de la aplicación de capa de datos (DACFx).This feature is incompatible with database export using Data Tier Application Framework (DACFx). Debe quitar todos los certificados antes de exportar.You must drop all certificates before exporting.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

-- Syntax for SQL Server and Azure SQL Database  
  
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> ) ]   
      }  
    | {   
        BINARY = asn_encoded_certificate  
        [ 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' ]    
      }  
    |  
      {   
        BINARY = private_key_bits  
         [ , DECRYPTION BY PASSWORD = 'password' ]  
         [ , ENCRYPTION BY PASSWORD = 'password' ]    
      }  
  
<date_options> ::=  
    START_DATE = 'datetime' | EXPIRY_DATE = 'datetime'  
-- Syntax for Parallel Data Warehouse  
  
CREATE CERTIFICATE certificate_name   
    { <generate_new_keys> | FROM <existing_keys> }  
    [ ; ]  
  
<generate_new_keys> ::=   
    WITH SUBJECT ='certificate_subject_name'   
    [ , <date_options> [ ,...n ] ]   
  
<existing_keys> ::=   
    {   
      FILE ='path_to_file'  
      WITH PRIVATE KEY   
         (   
           FILE ='path_to_private_key'  
           , DECRYPTION BY PASSWORD ='password'   
         )  
    }  
  
<date_options> ::=  
    START_DATE ='datetime' | EXPIRY_DATE ='datetime'  

ArgumentosArguments

certificate_namecertificate_name
Es el nombre del certificado de la base de datos.Is the name for the certificate in the database.

AUTHORIZATION user_nameAUTHORIZATION user_name
Es el nombre del usuario propietario del certificado.Is the name of the user that owns this certificate.

ASSEMBLY assembly_nameASSEMBLY assembly_name
Especifica un ensamblado firmado que se ha cargado en la base de datos.Specifies a signed assembly that has already been loaded into the database.

[ EXECUTABLE ] FILE ='path_to_file'[ 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.Specifies the complete path, including file name, to a DER-encoded file that contains the certificate. Si se usa la opción EXECUTABLE, el archivo es una DLL firmada por el certificado.If the EXECUTABLE option is used, the file is a DLL that has been signed by the certificate. path_to_file puede ser una ruta de acceso local o una ruta UNC a una ubicación de red.path_to_file can be a local path or a UNC path to a network location. Se accede al archivo en el contexto de seguridad de la cuenta de servicio de SQL ServerSQL Server.The file is accessed in the security context of the SQL ServerSQL Server service account. Esta cuenta debe disponer de los necesarios permisos de sistema de archivos.This account must have the required file-system permissions.

Importante

Azure SQL Database no admite la creación de un certificado desde un archivo o mediante archivos de clave privada.Azure SQL Database does not support creating a certificate from a file or using private key files.

BINARY =asn_encoded_certificateBINARY =asn_encoded_certificate
Bytes de certificado codificados por ASN especificados como una constante binaria.ASN encoded certificate bytes specified as a binary constant.
Se aplica a: desde SQL Server 2012 (11.x)SQL Server 2012 (11.x) hasta SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

WITH PRIVATE KEYWITH PRIVATE KEY
Especifica que la clave privada del certificado se ha cargado en SQL ServerSQL Server.Specifies that the private key of the certificate is loaded into SQL ServerSQL Server. Esta cláusula no es válida si el certificado se crea desde un ensamblado.This clause is invalid when the certificate is being created from an assembly. Para cargar la clave privada de un certificado creado desde un ensamblado, use ALTER CERTIFICATE.To load the private key of a certificate created from an assembly, use ALTER CERTIFICATE.

FILE ='path_to_private_key'FILE ='path_to_private_key'
Especifica la ruta de acceso completa a la clave privada, incluido el nombre de archivo.Specifies the complete path, including file name, to the private key. path_to_private_key puede ser una ruta de acceso local o una ruta UNC a una ubicación de red.path_to_private_key can be a local path or a UNC path to a network location. Se accede al archivo en el contexto de seguridad de la cuenta de servicio de SQL ServerSQL Server.The file is accessed in the security context of the SQL ServerSQL Server service account. Esta cuenta debe disponer de los necesarios permisos de sistema de archivos.This account must have the necessary file-system permissions.

Importante

Esta opción no está disponible en una base de datos independiente o en Azure SQL Database.This option is not available in a contained database or in Azure SQL Database.

BINARY =private_key_bitsBINARY =private_key_bits
Se aplica a: desde SQL Server 2012 (11.x)SQL Server 2012 (11.x) hasta SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

Bits de clave privada especificados como una constante binaria.Private key bits specified as binary constant. Estos bits pueden estar en forma cifrada.These bits can be in encrypted form. Si están cifrados, el usuario debe proporcionar una contraseña de descifrado.If encrypted, the user must provide a decryption password. No se realizan comprobaciones de directiva de contraseña en esta contraseña.Password policy checks are not performed on this password. Los bits de clave privada deben tener el formato de archivo PVK.The private key bits should be in a PVK file format.

DECRYPTION BY PASSWORD ='key_password'DECRYPTION BY PASSWORD ='key_password'
Especifica la contraseña necesaria para descifrar una clave privada recuperada de un archivo.Specifies the password required to decrypt a private key that is retrieved from a file. La cláusula es opcional si la clave privada está protegida por una contraseña NULL.This clause is optional if the private key is protected by a null password. No se recomienda guardar una clave privada de un archivo sin protección de contraseña.Saving a private key to a file without password protection is not recommended. Si no se especifica una contraseña y es obligatorio hacerlo, se produce un error en la instrucción.If a password is required but no password is specified, the statement fails.

ENCRYPTION BY PASSWORD ='password'ENCRYPTION BY PASSWORD ='password'
Especifica la contraseña usada para cifrar la clave privada.Specifies the password used to encrypt the private key. Utilice esta opción solo si desea cifrar el certificado con una contraseña.Use this option only if you want to encrypt the certificate with a password. Si se omite esta cláusula, la clave privada se cifra usando la clave maestra de la base de datos.If this clause is omitted, the private key is encrypted using the database master key. password debe cumplir los requisitos de la directiva de contraseñas de Windows del equipo que ejecuta la instancia de SQL ServerSQL Server.password must meet the Windows password policy requirements of the computer that is running the instance of SQL ServerSQL Server. Para obtener más información, vea Password Policy.For more information, see Password Policy.

SUBJECT ='certificate_subject_name'SUBJECT ='certificate_subject_name'
El término subject se refiere a un campo de asunto en los metadatos del certificado, según lo establecido en el estándar X.509.The term subject refers to a field in the metadata of the certificate as defined in the X.509 standard. El contenido del asunto no debe tener más de 64 caracteres; este límite se aplica para SQL ServerSQL Server en Linux.The subject should be no more than 64 characters long, and this limit is enforced for SQL ServerSQL Server on Linux. Para SQL ServerSQL Server en Windows, este campo puede tener un máximo de 128 caracteres.For SQL ServerSQL Server on Windows, the subject can be up to 128 characters long. Los asuntos que superen los 128 caracteres se truncan al almacenarlos en el catálogo, pero el objeto binario grande (BLOB) que contiene el certificado conserva el nombre de asunto completo.Subjects that exceed 128 characters are truncated when they are stored in the catalog, but the binary large object (BLOB) that contains the certificate retains the full subject name.

START_DATE ='datetime'START_DATE ='datetime'
Es la fecha en la que el certificado comienza a ser válido.Is the date on which the certificate becomes valid. Si no se especifica, START_DATE coincide con la fecha actual.If not specified, START_DATE is set equal to the current date. START_DATE se especifica en hora UTC y en cualquier formato que se pueda convertir a una fecha y hora.START_DATE is in UTC time and can be specified in any format that can be converted to a date and time.

EXPIRY_DATE ='datetime'EXPIRY_DATE ='datetime'
Es la fecha en la que expira el certificado.Is the date on which the certificate expires. Si no se especifica, EXPIRY_DATE es una fecha un año posterior a la indicada en START_DATE.If not specified, EXPIRY_DATE is set to a date one year after START_DATE. EXPIRY_DATE se especifica en hora UTC y en cualquier formato que se pueda convertir a una fecha y hora.EXPIRY_DATE is in UTC time and can be specified in any format that can be converted to a date and time. SQL ServerSQL Server Service Broker comprueba la fecha de expiración,Service Broker checks the expiration date. Backup con cifrado que usa certificados también comprueba la fecha de expiración y no permitirá que una nueva copia de seguridad se cree con un certificado caducado, pero permitirá restauraciones con un certificado caducado.Backup with Encryption using certificates also checks the expiration date and will not allow a new backup to be created with an expired certificate, but will allow restores with an expired certificate. Sin embargo, no se exige la expiración cuando el certificado se usa para el cifrado de base de datos o para Always Encrypted.However, expiration is not enforced when the certificate is used for database encryption or Always Encrypted.

ACTIVE FOR BEGIN_DIALOG = { ON | OFF }ACTIVE FOR BEGIN_DIALOG = { ON | OFF }
Hace que el certificado esté disponible para el iniciador de una conversación de diálogo de Service BrokerService Broker.Makes the certificate available to the initiator of a Service BrokerService Broker dialog conversation. El valor predeterminado es ON.The default value is ON.

ObservacionesRemarks

Un certificado es un elemento protegible de nivel de base de datos que sigue el estándar X.509 y admite los campos V1 de X.509.A certificate is a database-level securable that follows the X.509 standard and supports X.509 V1 fields. CREATE CERTIFICATE puede cargar un certificado desde un archivo, una constante binaria o un ensamblado.CREATE CERTIFICATE can load a certificate from a file, a binary constant, or an assembly. Esta instrucción también puede generar un par de claves y crear un certificado con firma personal.This statement can also generate a key pair and create a self-signed certificate.

La clave privada debe ser <= 2500 bytes en formato cifrado.The Private Key must be <= 2500 bytes in encrypted format. Las claves privadas generadas por SQL ServerSQL Server tienen una longitud de 1024 bits hasta SQL Server 2014 (12.x)SQL Server 2014 (12.x) y tienen 2048 bits a partir de SQL Server 2016 (13.x)SQL Server 2016 (13.x).Private keys generated by SQL ServerSQL Server are 1024 bits long through SQL Server 2014 (12.x)SQL Server 2014 (12.x) and are 2048 bits long beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x). Las claves privadas importadas de un origen externo presentan una longitud mínima de 384 bits y una máxima de 4.096 bits.Private keys imported from an external source have a minimum length of 384 bits and a maximum length of 4,096 bits. La longitud de una clave privada importada debe ser un entero múltiplo de 64 bits.The length of an imported private key must be an integer multiple of 64 bits. Los certificados que se usan para TDE tienen un límite de tamaño de clave privada de 3456 bits.Certificates used for TDE are limited to a private key size of 3456 bits.

Se almacena el número de serie completo del certificado, pero solo se muestran los 16 primeros bytes en la vista de catálogo sys.certificates.The entire Serial Number of the certificate is stored but only the first 16 bytes appear in the sys.certificates catalog view.

Se almacena todo el campo Emisor de certificado, pero solo se muestran los primeros 884 bytes en la vista de catálogo sys.certificates.The entire Issuer field of the certificate is stored but only the first 884 bytes in the sys.certificates catalog view.

La clave privada debe corresponderse con la clave pública especificada por certificate_name.The private key must correspond to the public key specified by certificate_name.

Cuando se crea un certificado desde un contenedor, es opcional cargar la clave privada.When you create a certificate from a container, loading the private key is optional. Pero cuando SQL ServerSQL Server genera un certificado con firma personal, siempre se creará la clave privada.But when SQL ServerSQL Server generates a self-signed certificate, the private key is always created. De manera predeterminada, la clave privada se cifra con la clave maestra de base de datos.By default, the private key is encrypted using the database master key. Si no existe una clave maestra de base de datos y no se especifica una contraseña, se produce un error en la instrucción.If the database master key does not exist and no password is specified, the statement fails.

No se necesita la opción ENCRYPTION BY PASSWORD si se cifra la clave privada con la clave maestra de base de datos.The ENCRYPTION BY PASSWORD option is not required when the private key is encrypted with the database master key. Use esta opción solo si se cifra la clave privada con una contraseña.Use this option only when the private key is encrypted with a password. Si no se especifica una contraseña, la clave privada del certificado se cifrará con la clave maestra de base de datos.If no password is specified, the private key of the certificate will be encrypted using the database master key. Si no se puede abrir la clave maestra de la base de datos, se produce un error al abrir esta cláusula.If the master key of the database cannot be opened, omitting this clause causes an error.

No es necesario especificar una contraseña de descifrado si se cifra la clave privada con la clave maestra de base de datos.You do not have to specify a decryption password when the private key is encrypted with the database master key.

Nota

Las funciones integradas para el cifrado y firma no comprueban las fechas de expiración de los certificados.Built-in functions for encryption and signing do not check the expiration dates of certificates. Los usuarios de estas funciones deben decidir cuándo comprobar la expiración de los certificados.Users of these functions must decide when to check certificate expiration.

Se puede crear una descripción binaria de un certificado mediante las funciones CERTENCODED (Transact-SQL) y CERTPRIVATEKEY (Transact-SQL).A binary description of a certificate can be created by using the CERTENCODED (Transact-SQL) and CERTPRIVATEKEY (Transact-SQL) functions. Para ver un ejemplo donde se usa CERTPRIVATEKEY y CERTENCODED para copiar un certificado en otra base de datos, vea el ejemplo B del artículo CERTENCODED (Transact-SQL).For an example that uses CERTPRIVATEKEY and CERTENCODED to copy a certificate to another database, see example B in the article CERTENCODED (Transact-SQL).

PermisosPermissions

Requiere el permiso CREATE CERTIFICATE en la base de datos.Requires CREATE CERTIFICATE permission on the database. Solo los inicios de sesión de Windows, los inicios de sesión de SQL ServerSQL Server y los roles de aplicación pueden poseer certificados.Only Windows logins, SQL ServerSQL Server logins, and application roles can own certificates. Los grupos y roles no pueden poseer los certificados.Groups and roles cannot own certificates.

EjemplosExamples

A.A. Crear un certificado autofirmadoCreating a self-signed certificate

En el siguiente ejemplo se crea un certificado denominado Shipping04.The following example creates a certificate called Shipping04. La clave privada de este certificado está protegida con una contraseña.The private key of this certificate is protected using a password.

CREATE CERTIFICATE Shipping04   
   ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'  
   WITH SUBJECT = 'Sammamish Shipping Records',   
   EXPIRY_DATE = '20201031';  
GO  

B.B. Crear un certificado desde un archivoCreating a certificate from a file

En el ejemplo siguiente se crea un certificado en la base de datos y se carga el par de claves desde los archivos.The following example creates a certificate in the database, loading the key pair from files.

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   

Importante

Azure SQL Database no admite la creación de un certificado desde un archivo.Azure SQL Database does not support creating a certificate from a file.

C.C. Crear un certificado desde un archivo ejecutable firmadoCreating a certificate from a signed executable file

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.Alternatively, you can create an assembly from the dll file, and then create a certificate from the assembly.

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

Importante

Azure SQL Database no admite la creación de un certificado desde un archivo.Azure SQL Database does not support creating a certificate from a file.

Importante

A partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x), la opción de configuración del servidor 'CLR strict security' evita la carga de ensamblados sin configurar primero su seguridad.Starting in SQL Server 2017 (14.x)SQL Server 2017 (14.x), the 'CLR strict security' server configuration option prevents loading assemblies without first setting up the security for them. Cargue el certificado, cree un inicio de sesión a partir del mismo, conceda UNSAFE ASSEMBLY a ese inicio de sesión y, a continuación, cargue el ensamblado.Load the certificate, create a login from it, grant UNSAFE ASSEMBLY to that login, and then load the assembly.

D.D. Crear un certificado autofirmadoCreating a self-signed certificate

En este ejemplo se crea un certificado denominado Shipping04 sin especificar una contraseña de cifrado.The following example creates a certificate called Shipping04 without specifying an encryption password. Este ejemplo se puede usar con Almacenamiento de datos paralelosParallel Data Warehouse.This example can be used with Almacenamiento de datos paralelosParallel Data Warehouse.

CREATE CERTIFICATE Shipping04   
   WITH SUBJECT = 'Sammamish Shipping Records';  
GO  

Consulte tambiénSee Also

ALTER CERTIFICATE (Transact-SQL) ALTER CERTIFICATE (Transact-SQL)
DROP CERTIFICATE (Transact-SQL) DROP CERTIFICATE (Transact-SQL)
BACKUP CERTIFICATE (Transact-SQL) BACKUP CERTIFICATE (Transact-SQL)
Jerarquía de cifrado Encryption Hierarchy
EVENTDATA (Transact-SQL) EVENTDATA (Transact-SQL)
CERTENCODED (Transact-SQL) CERTENCODED (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)CERTPRIVATEKEY (Transact-SQL)
CERT_ID (Transact-SQL)CERT_ID (Transact-SQL)
CERTPROPERTY (Transact-SQL)CERTPROPERTY (Transact-SQL)