CREATE CERTIFICATE (Transact-SQL)

Permet d'ajouter un certificat à une base de données.

Icône Lien de rubriqueConventions de la syntaxe Transact-SQL

Syntaxe

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'

Arguments

  • certificate_name
    Nom sous lequel le certificat sera connu dans la base de données.

  • AUTHORIZATION user_name
    Nom de l'utilisateur auquel appartiendra ce certificat.

  • ASSEMBLY assembly_name
    Spécifie un assembly signé qui a déjà été chargé dans la base de données.

  • [ 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. Si l'option EXECUTABLE est utilisée, le fichier est une DLL signée par le certificat. path_to_file peut être un chemin d'accès local ou le chemin UNC d'un emplacement réseau. L'accès au fichier s'effectuera dans le contexte de sécurité du compte de service SQL Server. Ce compte doit posséder les autorisations de système de fichiers requises.

  • WITH PRIVATE KEY
    Spécifie que la clé privée du certificat est chargée dans SQL Server. Cette clause est valide uniquement lorsque le certificat est créé à partir d'un fichier. Pour charger la clé privée d'un assembly, utilisez ALTER CERTIFICATE.

  • FILE ='path_to_private_key'
    Spécifie le chemin d'accès complet, y compris le nom de fichier, de la clé privée. path_to_private_key peut être un chemin d'accès local ou le chemin UNC d'un emplacement réseau. L'accès au fichier s'effectuera dans le contexte de sécurité du compte de service SQL Server. Ce compte doit posséder les autorisations de système de fichiers nécessaires.

  • 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. Cette clause est facultative si la clé privée est protégée par un mot de passe vide. Il n'est pas conseillé d'enregistrer une clé privée dans un fichier sans la protéger par un mot de passe. Si un mot de passe est requis mais qu'aucun mot de passe n'est spécifié, l'instruction échoue.

  • ENCRYPTION BY PASSWORD ='password'
    Spécifie le mot de passe qui sera utilisé pour chiffrer la clé privée. Utilisez cette option seulement si vous voulez chiffrer le certificat à l'aide d'un mot de passe. Si cette clause est omise, la clé privée sera chiffrée à l'aide de la clé principale de base de données. 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 Server. Pour plus d'informations, consultez Stratégie de mot de passe.

  • 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. L'objet peut contenir jusqu'à 128 caractères. Les objets de plus de 128 caractères sont tronqués lorsqu'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.

  • START_DATE ='datetime'
    Date à laquelle le certificat devient valide. Si cette date n'est pas spécifiée, la date actuelle est attribuée à START_DATE. START_DATE utilise l'heure UTC et peut être spécifié selon tout format convertible en date et heure.

  • EXPIRY_DATE ='datetime'
    Date à laquelle le certificat expire. Si cette date n'est pas spécifiée, EXPIRY_DATE aura une valeur égale à un an après START_DATE. EXPIRY_DATE utilise l'heure UTC et peut être spécifié selon tout format convertible en date et heure. SQL Server Service Broker vérifie la date d'expiration ; toutefois, l'expiration n'est pas appliquée lorsque le certificat est utilisé pour le chiffrement.

  • ACTIVE FOR BEGIN_DIALOG = { ON | OFF }
    Met le certificat à la disposition de l'initiateur d'un dialogue Service Broker. La valeur par défaut est ON.

Notes

Un certificat est un sécurisable de niveau base de données qui suit la norme X.509 et prend en charge les champs X.509 V1. CREATE CERTIFICATE permet de charger un certificat à partir d'un fichier ou d'un assembly. Cette instruction peut également générer une paire de clés et créer un certificat autosigné.

Les clés privées générées par SQL Server ont une longueur de 1 024 bits. Les clés privées importées à partir d'une source externe ont une longueur minimale de 384 bits et une longueur maximale de 3 456 bits. La longueur d'une clé privée importée doit être un entier multiple de 64 bits.

La clé privée doit correspondre à la clé publique spécifiée par certificate_name.

Lorsque vous créez un certificat à partir d'un conteneur, le chargement de la clé privée est facultatif. En revanche, lorsque SQL Server génère un certificat autosigné, la clé privée est toujours créée. Par défaut, la clé privée est chiffrée au moyen de la clé principale de base de données. 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.

L'option ENCRYPTION BY PASSWORD n'est pas requise lorsque la clé privée est chiffrée au moyen de la clé principale de base de données. Utilisez cette option seulement lorsque la clé privée doit être chiffrée à l'aide d'un mot de passe. 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. Ne pas spécifier cette clause entraînera une erreur, si la clé principale de la base de données ne peut pas être ouverte.

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.

Notes

Les fonctions intégrées de chiffrement et de signature ne vérifient pas les dates d'expiration des certificats. Les utilisateurs de ces fonctions doivent décider quand vérifier l'expiration des certificats.

Autorisations

Requiert l'autorisation CREATE CERTIFICATE sur la base de données. Les connexions Windows, les connexions SQL Server et les rôles d'application sont les seuls à pouvoir posséder des certificats. Les groupes et les rôles ne peuvent pas posséder de certificats.

Exemples

A. Création d'un certificat auto-signé

L'exemple suivant crée un certificat nommé Shipping04. La clé privée de ce certificat est protégée à l'aide d'un mot de passe.

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

B. Création d'un certificat à partir d'un fichier

L'exemple ci-dessous crée un certificat dans la base de données en chargeant la paire de clés à partir de fichiers.

USE AdventureWorks2008R2;
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. Création d'un certificat à partir d'un fichier exécutable signé

USE AdventureWorks2008R2;
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.

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