CREATE CERTIFICATE (Transact-SQL)
Fügt einer Datenbank ein Zertifikat hinzu.
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'
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. |
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
