CREATE CERTIFICATE (Transact-SQL)

Fügt einer Datenbank ein Zertifikat hinzu.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

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'

Argumente

  • certificate_name
    Der Name des Zertifikats in der Datenbank.

  • AUTHORIZATION user_name
    Der Name des Benutzers, der das Zertifikat besitzen wird.

  • ASSEMBLY assembly_name
    Gibt eine signierte Assembly an, die bereits in die Datenbank geladen wurde.

  • [ EXECUTABLE ] FILE ='path_to_file'
    Gibt den vollständigen Pfad einschließlich des Dateinamens zur DER-codierten Datei an, die das Zertifikat enthält. Falls die EXECUTABLE-Option verwendet wird, handelt es sich bei der Datei um eine DLL-Datei, die mit dem Zertifikat signiert wurde. path_to_file kann ein lokaler Pfad oder ein UNC-Pfad zu einem Netzwerkspeicherort sein. Die Datei wird im Sicherheitskontext des SQL Server-Dienstkontos ausgeführt. Dieses Konto muss über die erforderlichen Dateisystemberechtigungen verfügen.

  • WITH PRIVATE KEY
    Gibt an, dass der private Schlüssel des Zertifikats in SQL Server geladen wird. Diese Klausel ist nur gültig, wenn das Zertifikat aus einer Datei erstellt wird. Zum Laden des privaten Schlüssels einer Assembly können Sie ALTER CERTIFICATE verwenden.

  • FILE ='path_to_private_key'
    Gibt den vollständigen Pfad einschließlich des Dateinamens zum privaten Schlüssel an. path_to_private_key kann ein lokaler Pfad oder ein UNC-Pfad zu einem Netzwerkspeicherort sein. Die Datei wird im Sicherheitskontext des SQL Server-Dienstkontos ausgeführt. Dieses Konto muss über die erforderlichen Dateisystemberechtigungen verfügen.

  • DECRYPTION BY PASSWORD = 'key_password'
    Gibt das Kennwort an, das zum Entschlüsseln eines privaten Schlüssels erforderlich ist, der aus einer Datei abgerufen wird. Diese Klausel ist optional, wenn der private Schlüssel nicht durch ein Kennwort geschützt ist. Das Speichern eines privaten Schlüssels in einer Datei ohne Kennwortschutz wird nicht empfohlen. Falls ein Kennwort erforderlich, nicht jedoch angegeben ist, erzeugt die Anweisung einen Fehler.

  • ENCRYPTION BY PASSWORD ='password'
    Gibt das Kennwort an, mit dem der private Schlüssel verschlüsselt wird. Verwenden Sie diese Option nur, wenn Sie das Zertifikat mit einem Kennwort verschlüsseln möchten. Wird diese Klausel nicht angegeben, wird der private Schlüssel mit dem Datenbank-Hauptschlüssel verschlüsselt. password muss den Anforderungen der Windows-Kennwortrichtlinien des Computers genügen, auf dem die Instanz von SQL Server ausgeführt wird. Weitere Informationen finden Sie unter Kennwortrichtlinie.

  • SUBJECT = 'certificate_subject_name'
    Der Begriff Antragsteller (subject) bezieht sich auf ein Feld in den Metadaten des Zertifikats, wie es im X.509-Standard definiert ist. Der Name des Antragstellers kann bis zu 128 Zeichen lang sein. Ein Antragsteller mit mehr als 128 Zeichen wird abgeschnitten, wenn er im Katalog gespeichert wird. In den BLOB-Daten (Binary Large Object), die das Zertifikat enthalten, ist jedoch der vollständige Name des Antragstellers gespeichert.

  • START_DATE ='datetime'
    Das Datum, an dem das Zertifikat gültig wird. Wenn kein Datum angegeben ist, wird das aktuelle Datum für START_DATE festgelegt. START_DATE ist in UTC-Zeit und kann in jedem Format angegeben werden, das in ein Datum und eine Uhrzeit konvertiert werden kann.

  • EXPIRY_DATE ='datetime'
    Das Datum, an dem das Zertifikat abläuft. Wenn kein Datum angegeben ist, wird EXPIRY_DATE auf das Datum ein Jahr nach START_DATE festgelegt. EXPIRY_DATE ist in UTC-Zeit und kann in jedem Format angegeben werden, das in ein Datum und eine Uhrzeit konvertiert werden kann. SQL Server Service Broker prüft das Ablaufdatum. Der Ablauf wird jedoch nicht erzwungen, wenn das Zertifikat für die Verschlüsselung verwendet wird.

  • ACTIVE FOR BEGIN_DIALOG = { ON | OFF }
    Stellt das Zertifikat für den Initiator einer Service Broker-Dialogkonversation bereit. Der Standardwert ist ON.

Hinweise

Ein Zertifikat ist ein sicherungsfähiges Element auf Datenbankebene, das dem X.509-Standard entspricht und X.509 V1-Felder unterstützt. CREATE CERTIFICATE kann ein Zertifikat aus einer Datei oder Assembly laden. Mit dieser Anweisung kann auch ein Schlüsselpaar generiert und ein selbstsigniertes Zertifikat erstellt werden.

Von SQL Server generierte private Schlüssel sind 1024 Bits lang. Private Schlüssel, die von einer externen Quelle importiert werden, haben eine minimale Länge von 384 Bits und eine maximale Länge von 3.456 Bits. Die Länge eines importierten privaten Schlüssels muss ein ganzzahliges Produkt von 64 Bits sein.

Der private Schlüssel muss dem in certificate_name angegebenen öffentlichen Schlüssel entsprechen.

Beim Erstellen eines Zertifikats aus einem Container ist das Laden des privaten Schlüssels optional. Wenn von SQL Server jedoch ein selbstsigniertes Zertifikat generiert wird, wird der private Schlüssel immer erstellt. Standardmäßig ist der private Schlüssel mit dem Datenbank-Hauptschlüssel verschlüsselt. Falls kein Datenbank-Hauptschlüssel vorhanden und kein Kennwort angegeben ist, erzeugt die Anweisung einen Fehler.

Die ENCRYPTION BY PASSWORD-Option ist nicht erforderlich, wenn der private Schlüssel mit dem Datenbank-Hauptschlüssel verschlüsselt wird. Verwenden Sie diese Option nur, wenn der private Schlüssel mit einem Kennwort verschlüsselt wird. Falls kein Kennwort angegeben ist, wird der private Schlüssel des Zertifikats mit dem Datenbank-Hauptschlüssel verschlüsselt. Wird diese Klausel ausgelassen, führt dies zu einem Fehler, wenn der Hauptschlüssel der Datenbank nicht geöffnet werden kann.

Sie müssen kein Entschlüsselungskennwort angeben, wenn der private Schlüssel mit dem Datenbank-Hauptschlüssel verschlüsselt ist.

HinweisHinweis

Die Ablaufdaten von Zertifikaten werden von integrierten Funktionen für die Verschlüsselung und Signierung nicht überprüft. Benutzer dieser Funktionen müssen entscheiden, wann die Ablaufdaten der Zertifikate überprüft werden sollen.

Berechtigungen

Erfordert die CREATE CERTIFICATE-Berechtigung für die Datenbank. Nur Windows-Anmeldenamen, SQL Server-Anmeldenamen und Anwendungsrollen können Zertifikate besitzen. Gruppen und Rollen können keine Zertifikate besitzen.

Beispiele

A. Erstellen eines selbstsignierten Zertifikats

Im folgenden Beispiel wird ein Zertifikat mit dem Namen Shipping04 erstellt. Der private Schlüssel dieses Zertifikats wird mit einem Kennwort geschützt.

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

B. Erstellen eines Zertifikats aus einer Datei

Im folgenden Beispiel wird ein Zertifikat in der Datenbank erstellt, wobei das Schlüsselpaar aus Dateien geladen wird.

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. Erstellen eines Zertifikats aus einer signierten ausführbaren Datei

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

Alternativ können Sie eine Assembly aus der dll-Datei erstellen und anschließend ein Zertifikat aus der Assembly erstellen.

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