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

S’APPLIQUE À : ouiSQL Server ouiAzure SQL Database nonAzure Synapse Analytics (SQL DW) ouiParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Permet d'ajouter un certificat à une base de données dans SQL ServerSQL Server.Adds a certificate to a database in SQL ServerSQL Server.

Cette fonctionnalité est incompatible avec l'exportation de base de données à l'aide de l'infrastructure d'application de la couche Données.This feature is incompatible with database export using Data Tier Application Framework (DACFx). Vous devez supprimer tous les certificats avant l'exportation.You must drop all certificates before exporting.

Icône Lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

-- 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'  

ArgumentsArguments

certificate_namecertificate_name
Nom du certificat dans la base de données.Is the name for the certificate in the database.

AUTHORIZATION user_nameAUTHORIZATION user_name
Nom de l’utilisateur auquel appartient ce certificat.Is the name of the user that owns this certificate.

ASSEMBLY assembly_nameASSEMBLY assembly_name
Spécifie un assembly signé qui a déjà été chargé dans la base de données.Specifies a signed assembly that has already been loaded into the database.

[ EXECUTABLE ] FILE ='path_to_file'[ EXECUTABLE ] FILE ='path_to_file'
Spécifie le chemin d'accès complet, y compris le nom de fichier, d'un fichier encodé DER qui contient le certificat.Specifies the complete path, including file name, to a DER-encoded file that contains the certificate. Si l'option EXECUTABLE est utilisée, le fichier est une DLL signée par le certificat.If the EXECUTABLE option is used, the file is a DLL that has been signed by the certificate. path_to_file peut être un chemin local ou un chemin UNC d’un emplacement réseau.path_to_file can be a local path or a UNC path to a network location. L’accès au fichier s’effectue dans le contexte de sécurité du compte de service SQL ServerSQL Server.The file is accessed in the security context of the SQL ServerSQL Server service account. Ce compte doit posséder les autorisations de système de fichiers requises.This account must have the required file-system permissions.

Important

Azure SQL Database ne prend pas en charge la création d’un certificat à partir d’un fichier ou à l’aide de fichiers de clé privée.Azure SQL Database does not support creating a certificate from a file or using private key files.

BINARY =asn_encoded_certificateBINARY =asn_encoded_certificate
Bits de certificat encodés par ASN spécifiés comme constante binaire.ASN encoded certificate bytes specified as a binary constant.
S'applique à: SQL Server 2012 (11.x)SQL Server 2012 (11.x) jusqu'à SQL ServerSQL Server.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL ServerSQL Server.

WITH PRIVATE KEYWITH PRIVATE KEY
Spécifie que la clé privée du certificat est chargée dans SQL ServerSQL Server.Specifies that the private key of the certificate is loaded into SQL ServerSQL Server. Cette clause est invalide lorsque le certificat est créé à partir d’un assembly.This clause is invalid when the certificate is being created from an assembly. Pour charger la clé privée d’un certificat créé à partir d’un assembly, utilisez 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'
Spécifie le chemin d'accès complet, y compris le nom du fichier, à la clé privée.Specifies the complete path, including file name, to the private key. path_to_private_key peut être un chemin local ou un chemin UNC d’un emplacement réseau.path_to_private_key can be a local path or a UNC path to a network location. L’accès au fichier s’effectue dans le contexte de sécurité du compte de service SQL ServerSQL Server.The file is accessed in the security context of the SQL ServerSQL Server service account. Ce compte doit posséder les autorisations de système de fichiers nécessaires.This account must have the necessary file-system permissions.

Important

Cette option n’est pas disponible dans une base de données autonome, ni dans Azure SQL Database.This option is not available in a contained database or in Azure SQL Database.

BINARY =private_key_bitsBINARY =private_key_bits
S'applique à: SQL Server 2012 (11.x)SQL Server 2012 (11.x) jusqu'à SQL ServerSQL Server.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL ServerSQL Server.

Bits de clé privée spécifiés comme constante binaire.Private key bits specified as binary constant. Ces bits peuvent être sous forme chiffrée.These bits can be in encrypted form. Si chiffrés, l'utilisateur doit fournir un mot de passe de déchiffrement.If encrypted, the user must provide a decryption password. Les contrôles de stratégie de mot de passe ne sont pas exécutés sur ce mot de passe.Password policy checks are not performed on this password. Les bits de clé privée doivent être dans un format de fichier PVK.The private key bits should be in a PVK file format.

DECRYPTION BY PASSWORD ='key_password'DECRYPTION BY PASSWORD ='key_password'
Spécifie le mot de passe requis pour déchiffrer une clé privée récupérée à partir d'un fichier.Specifies the password required to decrypt a private key that is retrieved from a file. Cette clause est facultative si la clé privée est protégée par un mot de passe vide.This clause is optional if the private key is protected by a null password. Il n'est pas conseillé d'enregistrer une clé privée dans un fichier sans la protéger par un mot de passe.Saving a private key to a file without password protection is not recommended. Si un mot de passe est nécessaire mais qu’aucun mot de passe n’est spécifié, l’instruction échoue.If a password is required but no password is specified, the statement fails.

ENCRYPTION BY PASSWORD ='password'ENCRYPTION BY PASSWORD ='password'
Spécifie le mot de passe utilisé pour chiffrer la clé privée.Specifies the password used to encrypt the private key. Utilisez cette option seulement si vous voulez chiffrer le certificat à l'aide d'un mot de passe.Use this option only if you want to encrypt the certificate with a password. Si cette clause est omise, la clé privée est chiffrée à l’aide de la clé principale de base de données.If this clause is omitted, the private key is encrypted using the database master key. password doit satisfaire aux critères de la stratégie de mot de passe Windows de l’ordinateur qui exécute l’instance de SQL ServerSQL Server.password must meet the Windows password policy requirements of the computer that is running the instance of SQL ServerSQL Server. Pour plus d'informations, consultez Password Policy.For more information, see Password Policy.

SUBJECT ='certificate_subject_name'SUBJECT ='certificate_subject_name'
Le terme subject fait référence à un champ dans les métadonnées du certificat, tel que défini dans la norme X.509.The term subject refers to a field in the metadata of the certificate as defined in the X.509 standard. L’objet ne doit pas faire plus de 64 caractères, et cette limite est appliquée pour SQL ServerSQL Server sur Linux.The subject should be no more than 64 characters long, and this limit is enforced for SQL ServerSQL Server on Linux. Pour SQL ServerSQL Server sur Windows, l’objet peut contenir jusqu’à 128 caractères.For SQL ServerSQL Server on Windows, the subject can be up to 128 characters long. Les objets de plus de 128 caractères sont tronqués quand ils sont stockés dans le catalogue, mais l’objet blob (binary large object) qui contient le certificat conserve le nom complet de l’objet.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'
Date à laquelle le certificat devient valide.Is the date on which the certificate becomes valid. Si cette date n’est pas spécifiée, la date actuelle est attribuée à START_DATE.If not specified, START_DATE is set equal to the current date. START_DATE utilise l'heure UTC et peut être spécifié selon tout format convertible en date et heure.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'
Date à laquelle le certificat expire.Is the date on which the certificate expires. Si cette date n’est pas spécifiée, EXPIRY_DATE a une valeur égale à un an après START_DATE.If not specified, EXPIRY_DATE is set to a date one year after START_DATE. EXPIRY_DATE utilise l'heure UTC et peut être spécifié selon tout format convertible en date et heure.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 vérifie la date d’expiration.Service Broker checks the expiration date. La sauvegarde avec chiffrement à l’aide de certificats vérifie également la date d’expiration et n’autorisera pas la création d’une sauvegarde avec un certificat expiré, mais permettra les restaurations avec un certificat expiré.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. Toutefois, l’expiration n’est pas appliquée quand le certificat est utilisé pour le chiffrement de la base de données ou le chiffrement intégral (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 }
Met le certificat à disposition de l'initiateur d'une conversation Service BrokerService Broker.Makes the certificate available to the initiator of a Service BrokerService Broker dialog conversation. La valeur par défaut est ON.The default value is ON.

NotesRemarks

Un certificat est un élément sécurisable de niveau base de données qui suit la norme X.509 et prend en charge les champs X.509 V1.A certificate is a database-level securable that follows the X.509 standard and supports X.509 V1 fields. CREATE CERTIFICATE permet de charger un certificat à partir d’un fichier, d’une constante binaire ou d’un assembly.CREATE CERTIFICATE can load a certificate from a file, a binary constant, or an assembly. Cette instruction peut également générer une paire de clés et créer un certificat autosigné.This statement can also generate a key pair and create a self-signed certificate.

La clé privée doit être <= 2500 octets dans un format chiffré.The Private Key must be <= 2500 bytes in encrypted format. Les clés privées générées par SQL ServerSQL Server font 1024 bits jusqu’à SQL Server 2014 (12.x)SQL Server 2014 (12.x), et 2 048 bits à compter 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). Les clés privées importées à partir d'une source externe ont une longueur minimale de 384 bits et une longueur maximale 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 longueur d'une clé privée importée doit être un entier multiple de 64 bits.The length of an imported private key must be an integer multiple of 64 bits. Les certificats utilisés pour le chiffrement transparent des données sont limités à une taille de clé privée de 3456 bits.Certificates used for TDE are limited to a private key size of 3456 bits.

Le numéro de série entier du certificat est stocké, mais seuls les 16 premiers octets apparaissent dans la vue de catalogue sys.certificates.The entire Serial Number of the certificate is stored but only the first 16 bytes appear in the sys.certificates catalog view.

Le champ entier de l’émetteur du certificat est stocké, mais seuls les 884 premiers octets apparaissent dans la vue de catalogue sys.certificates.The entire Issuer field of the certificate is stored but only the first 884 bytes in the sys.certificates catalog view.

La clé privée doit correspondre à la clé publique spécifiée par certificate_name.The private key must correspond to the public key specified by certificate_name.

Lorsque vous créez un certificat à partir d'un conteneur, le chargement de la clé privée est facultatif.When you create a certificate from a container, loading the private key is optional. En revanche, lorsque SQL ServerSQL Server génère un certificat autosigné, la clé privée est toujours créée.But when SQL ServerSQL Server generates a self-signed certificate, the private key is always created. Par défaut, la clé privée est chiffrée au moyen de la clé principale de base de données.By default, the private key is encrypted using the database master key. Si la clé principale de base de données n’existe pas et qu’aucun mot de passe n’est spécifié, l’instruction échoue.If the database master key does not exist and no password is specified, the statement fails.

L’option ENCRYPTION BY PASSWORD n’est pas nécessaire quand la clé privée est chiffrée au moyen de la clé principale de base de données.The ENCRYPTION BY PASSWORD option is not required when the private key is encrypted with the database master key. Utilisez cette option seulement quand la clé privée est chiffrée à l’aide d’un mot de passe.Use this option only when the private key is encrypted with a password. Si aucun mot de passe n'est spécifié, la clé privée du certificat sera chiffrée à l'aide de la clé principale de base de données.If no password is specified, the private key of the certificate will be encrypted using the database master key. Si la clé principale de la base de données ne peut pas être ouverte, ne pas spécifier cette clause entraîne une erreur.If the master key of the database cannot be opened, omitting this clause causes an error.

Vous n'êtes pas obligé de spécifier un mot de passe de déchiffrement lorsque la clé privée est chiffrée au moyen de la clé principale de base de données.You do not have to specify a decryption password when the private key is encrypted with the database master key.

Notes

Les fonctions intégrées de chiffrement et de signature ne vérifient pas les dates d'expiration des certificats.Built-in functions for encryption and signing do not check the expiration dates of certificates. Les utilisateurs de ces fonctions doivent décider quand vérifier l'expiration des certificats.Users of these functions must decide when to check certificate expiration.

Vous pouvez créer une description binaire d’un certificat à l’aide des fonctions CERTENCODED (Transact-SQL) et CERTPRIVATEKEY (Transact-SQL).A binary description of a certificate can be created by using the CERTENCODED (Transact-SQL) and CERTPRIVATEKEY (Transact-SQL) functions. L’exemple B de l’article CERTENCODED (Transact-SQL) utilise CERTPRIVATEKEY et CERTENCODED afin de copier un certificat dans une autre base de données.For an example that uses CERTPRIVATEKEY and CERTENCODED to copy a certificate to another database, see example B in the article CERTENCODED (Transact-SQL).

AutorisationsPermissions

Requiert l'autorisation CREATE CERTIFICATE sur la base de données.Requires CREATE CERTIFICATE permission on the database. Les connexions Windows, les connexions SQL ServerSQL Server et les rôles d’application sont les seuls à pouvoir posséder des certificats.Only Windows logins, SQL ServerSQL Server logins, and application roles can own certificates. Les groupes et les rôles ne peuvent pas posséder de certificats.Groups and roles cannot own certificates.

ExemplesExamples

A.A. Création d'un certificat auto-signéCreating a self-signed certificate

L'exemple suivant crée un certificat nommé Shipping04.The following example creates a certificate called Shipping04. La clé privée de ce certificat est protégée à l'aide d'un mot de passe.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. Création d'un certificat à partir d'un fichierCreating a certificate from a file

L'exemple ci-dessous crée un certificat dans la base de données en chargeant la paire de clés à partir de fichiers.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   

Important

Azure SQL Database ne prend pas en charge la création d’un certificat à partir d’un fichier.Azure SQL Database does not support creating a certificate from a file.

C.C. Création d'un certificat à partir d'un fichier exécutable signéCreating a certificate from a signed executable file

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

Une autre méthode consiste à créer un assembly à partir du fichier dll, puis à créer un certificat à partir de l'assembly.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  

Important

Azure SQL Database ne prend pas en charge la création d’un certificat à partir d’un fichier.Azure SQL Database does not support creating a certificate from a file.

Important

À compter de SQL Server 2017 (14.x)SQL Server 2017 (14.x), l’option de configuration de serveur « CLR strict security » empêche le chargement d’assemblys sans avoir d’abord défini les paramètres de sécurité les concernant.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. Chargez le certificat, créez une connexion à partir de celui-ci, autorisez UNSAFE ASSEMBLY pour cette connexion, puis chargez l’assembly.Load the certificate, create a login from it, grant UNSAFE ASSEMBLY to that login, and then load the assembly.

D.D. Création d'un certificat auto-signéCreating a self-signed certificate

L’exemple suivant crée un certificat nommé Shipping04 sans spécifier de mot de passe de chiffrement.The following example creates a certificate called Shipping04 without specifying an encryption password. Il est utilisable avec Parallel Data WarehouseParallel Data Warehouse.This example can be used with Parallel Data WarehouseParallel Data Warehouse.

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

Voir aussiSee 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)
Hiérarchie de chiffrement 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)