CREATE CERTIFICATE (Transact-SQL)

 

DIESES THEMA GILT FÜR:jaSQL Server (ab 2008)jaAzure SQL-DatenbankjaAzure SQL Data Warehouse jaParallel Data Warehouse

Fügt einer Datenbank in SQL Server ein Zertifikat hinzu.

Diese Funktion ist inkompatibel mit Datenbankexport über Data-Tier Application Framework (DACFx). Sie müssen alle Zertifikate vor dem Export löschen.

Topic link icon Transact-SQL-Syntaxkonventionen

-- 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 Azure SQL Data Warehouse and 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'  

Name
Der Name des Zertifikats in der Datenbank.

Autorisierung 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.

[AUSFÜHRBARE DATEI] Datei ='Dateipfad"
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. Dateipfad kann ein lokaler Pfad oder einen 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. Um den privaten Schlüssel einer Assembly zu laden, verwenden ALTER CERTIFICATE.

Datei ='Path_to_private_key"
Gibt den vollständigen Pfad einschließlich des Dateinamens für den privaten Schlüssel an. Path_to_private_key kann ein lokaler Pfad oder einen 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.

System_CAPS_ICON_note.jpg Hinweis


Diese Option ist in einer enthaltenen Datenbank nicht verfügbar.

asn_encoded_certificate
Mit ASN verschlüsselte Zertifikatbits, die als binäre Konstante angegeben sind.

BINÄRE =Private_key_bits

Gilt für: SQL Server 2012 bis SQL Server 2016.

Private Schlüsselbits, die als binäre Konstante angegeben sind. Diese Bits können in verschlüsselter Form vorhanden sein. Bei Verschlüsselung muss der Benutzer ein Entschlüsselungskennwort bereitstellen. Kennwortrichtlinienüberprüfungen werden für dieses Kennwort nicht ausgeführt. Die privaten Schlüsselbits müssen in einem PVK-Dateiformat vorliegen.

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 = "Kennwort"
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. Falls diese Klausel ausgelassen wird, wird der private Schlüssel mit dem Datenbank-Hauptschlüssel verschlüsselt. Kennwort erfüllt die Anforderungen der Windows-Kennwortrichtlinien des Computers, der die Instanz ausgeführt wird SQL Server. Weitere Informationen finden Sie unter Password Policy.

SUBJECT = "Zertifikatantragstellername ein"
Der Begriff Betreff bezieht sich auf ein Feld in den Metadaten des Zertifikats im x.&509;-Standard definiert. Der Antragsteller 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. Falls nichts 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. Falls nichts 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; 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 zur Verfügung. Der Standardwert ist ON.

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.

Der Private Schlüssel muss sein.<= 2500 bytes in encrypted format. 2500="" bytes="" in="" encrypted=""></= 2500 bytes in encrypted format.> Vom generierten privaten Schlüssel SQL Server sind 1024 Bits lang über SQL Server 2014 und 2048 Bits lang beginnen mit SQL Server 2016. Private Schlüssel, die aus einer externen Quelle importiert werden, haben eine minimale Länge von 384 Bits und eine maximale Länge von 4.096 Bits. Die Länge eines importierten privaten Schlüssels muss ein ganzzahliges Produkt von 64 Bits sein. Die für TDE verwendeten Zertifikate sind auf die private Schlüsselgröße von 3456 Bits beschränkt.

Die gesamte Seriennummer des Zertifikats gespeichert ist, aber nur die ersten 16 Bytes, die in der sys.certificates-Katalogsicht angezeigt werden.

Das gesamte Feld Aussteller desselben Zertifikats gespeichert ist, aber nur die ersten 884 Bytes in der sys.certificates-Katalogsicht.

Der private Schlüssel muss dem öffentlichen Schlüssel gemäß entsprechen Name.

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. Diese Klausel ausgelassen verursacht einen 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.

System_CAPS_ICON_note.jpg Hinweis


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.

Eine binäre Beschreibung eines Zertifikats kann erstellt werden, mithilfe der CERTENCODED (Transact-SQL) und CERTPRIVATEKEY (Transact-SQL) Funktionen. Ein Beispiel, verwendet CERTPRIVATEKEY und CERTENCODED zum Kopieren eines Zertifikats in eine andere Datenbank finden Sie unter Beispiel B im Thema CERTENCODED (Transact-SQL).

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

A. Erstellen eines selbstsignierten Zertifikats

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

USE AdventureWorks2012;  
CREATE CERTIFICATE Shipping04   
   ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'  
   WITH SUBJECT = 'Sammamish Shipping Records',   
   EXPIRY_DATE = '20201031';  
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 AdventureWorks2012;  
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 AdventureWorks2012;  
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 AdventureWorks2012;  
CREATE ASSEMBLY Shipping19   
    FROM ' c:\Shipping\Certs\Shipping19.dll'   
    WITH PERMISSION_SET = SAFE;  
GO  
CREATE CERTIFICATE Shipping19 FROM ASSEMBLY Shipping19;  
GO  

D. Erstellen eines selbstsignierten Zertifikats

Im folgenden Beispiel wird ein Zertifikat namens Shipping04 erstellt.

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

E. 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 master;  
GO  
CREATE CERTIFICATE Shipping11   
    FROM FILE = '\\Server7A\Shipping\Certs\Shipping11.cer'   
    WITH PRIVATE KEY (FILE = '\\Server7A\Shipping\Certs\Shipping11.pvk',   
    DECRYPTION BY PASSWORD = 'sldkflk34et6gs%53#v00');  
GO   

ALTER CERTIFICATE (Transact-SQL)
DROP CERTIFICATE (Transact-SQL)
BACKUP CERTIFICATE (Transact-SQL)
Verschlüsselungshierarchie
EVENTDATA (Transact-SQL)
CERTENCODED (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)

Community-Beiträge

HINZUFÜGEN
Anzeigen: