CREATE CERTIFICATE (Transact-SQL)
Fügt einer Datenbank ein Zertifikat hinzu.
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. Wenn diese Klausel ausgelassen wird, wird der private Schlüssel mit dem Datenbank-Hauptschlüssel verschlüsselt. password muss den Anforderungen der Windows-Kennwortrichtlinien des Computers entsprechen, 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 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. 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.
Die von SQL Server generierten privaten Schlüssel sind 1024 Bits lang. Private Schlüssel, die aus 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.
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. |
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 namens Shipping04 erstellt. Der private Schlüssel dieses Zertifikats wird mit einem Kennwort geschützt.
USE AdventureWorks2008R2;
CREATE CERTIFICATE Shipping04
ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
WITH SUBJECT = 'Sammamish Shipping Records',
EXPIRY_DATE = '20121031';
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 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. Erstellen eines Zertifikats aus einer signierten ausführbaren Datei
USE AdventureWorks2008R2;
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 AdventureWorks2008R2;
CREATE ASSEMBLY Shipping19
FROM ' c:\Shipping\Certs\Shipping19.dll'
WITH PERMISSION_SET = SAFE;
GO
CREATE CERTIFICATE Shipping19 FROM ASSEMBLY Shipping19;
GO