CREATE CERTIFICATE (Transact-SQL)CREATE CERTIFICATE (Transact-SQL)

GILT FÜR: JaSQL Server JaAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) JaParallel Data Warehouse APPLIES TO: YesSQL Server YesAzure SQL Database NoAzure Synapse Analytics (SQL DW) YesParallel Data Warehouse

Fügt einer Datenbank in SQL ServerSQL Server ein Zertifikat hinzu.Adds a certificate to a database in SQL ServerSQL Server.

Diese Funktion ist inkompatibel mit Datenbankexport über Data-Tier Application Framework (DACFx).This feature is incompatible with database export using Data Tier Application Framework (DACFx). Sie müssen alle Zertifikate vor dem Export löschen.You must drop all certificates before exporting.

Symbol für Themenlink Transact-SQL-SyntaxkonventionenTopic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

-- 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 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'  

ArgumenteArguments

certificate_namecertificate_name
Der Name eines Zertifikats in der Datenbank.Is the name for the certificate in the database.

AUTHORIZATION user_nameAUTHORIZATION user_name
Der Name des Benutzers, der das Zertifikat besitzt.Is the name of the user that owns this certificate.

ASSEMBLY assembly_nameASSEMBLY assembly_name
Gibt eine signierte Assembly an, die bereits in die Datenbank geladen wurde.Specifies a signed assembly that has already been loaded into the database.

[ EXECUTABLE ] FILE = 'path_to_file'[ EXECUTABLE ] FILE = 'path_to_file'
Gibt den vollständigen Pfad einschließlich des Dateinamens zur DER-codierten Datei an, die das Zertifikat enthält.Specifies the complete path, including file name, to a DER-encoded file that contains the certificate. Falls die EXECUTABLE-Option verwendet wird, handelt es sich bei der Datei um eine DLL-Datei, die mit dem Zertifikat signiert wurde.If the EXECUTABLE option is used, the file is a DLL that has been signed by the certificate. path_to_file kann ein lokaler Pfad oder ein UNC-Pfad zu einem Netzwerkspeicherort sein.path_to_file can be a local path or a UNC path to a network location. Die Datei wird im Sicherheitskontext des SQL ServerSQL Server-Dienstkontos ausgeführt.The file is accessed in the security context of the SQL ServerSQL Server service account. Dieses Konto muss über die erforderlichen Dateisystemberechtigungen verfügen.This account must have the required file-system permissions.

Wichtig

Das Erstellen eines Zertifikats aus einer Datei oder mithilfe von Dateien mit privaten Schlüsseln wird in Azure SQL-DatenbankAzure SQL Database nicht unterstützt.Azure SQL-DatenbankAzure SQL Database does not support creating a certificate from a file or using private key files.

BINARY = asn_encoded_certificateBINARY = asn_encoded_certificate
Mit ASN verschlüsselte Zertifikatbytes, die als binäre Konstante angegeben sind.ASN encoded certificate bytes specified as a binary constant.
Gilt für: SQL Server 2012 (11.x)SQL Server 2012 (11.x) und höher.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) and later.

WITH PRIVATE KEYWITH PRIVATE KEY
Gibt an, dass der private Schlüssel des Zertifikats in SQL ServerSQL Server geladen wird.Specifies that the private key of the certificate is loaded into SQL ServerSQL Server. Diese Klausel ist ungültig, wenn das Zertifikat aus einer Assembly erstellt wird.This clause is invalid when the certificate is being created from an assembly. Verwenden Sie ALTER CERTIFICATE, um den privaten Schlüssel eines aus einer Assembly erstellten Zertifikats zu laden.To load the private key of a certificate created from an assembly, use ALTER CERTIFICATE.

FILE ='path_to_private_key'FILE ='path_to_private_key'
Gibt den vollständigen Pfad einschließlich des Dateinamens für den privaten Schlüssel an.Specifies the complete path, including file name, to the private key. path_to_private_key kann ein lokaler Pfad oder ein UNC-Pfad zu einem Netzwerkspeicherort sein.path_to_private_key can be a local path or a UNC path to a network location. Die Datei wird im Sicherheitskontext des SQL ServerSQL Server-Dienstkontos ausgeführt.The file is accessed in the security context of the SQL ServerSQL Server service account. Dieses Konto muss über die erforderlichen Dateisystemberechtigungen verfügen.This account must have the necessary file-system permissions.

Wichtig

Diese Option ist weder in einer eigenständigen Datenbank noch in Azure SQL-DatenbankAzure SQL Database verfügbar.This option is not available in a contained database or in Azure SQL-DatenbankAzure SQL Database.

BINARY = private_key_bitsBINARY = private_key_bits
Gilt für: SQL ServerSQL Server (ab SQL Server 2012 (11.x)SQL Server 2012 (11.x)) und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x)) and Azure SQL-DatenbankAzure SQL Database.

Private Schlüsselbits, die als binäre Konstante angegeben sind.Private key bits specified as binary constant. Diese Bits können in verschlüsselter Form vorhanden sein.These bits can be in encrypted form. Bei Verschlüsselung muss der Benutzer ein Entschlüsselungskennwort bereitstellen.If encrypted, the user must provide a decryption password. Kennwortrichtlinienüberprüfungen werden für dieses Kennwort nicht ausgeführt.Password policy checks are not performed on this password. Die privaten Schlüsselbits müssen in einem PVK-Dateiformat vorliegen.The private key bits should be in a PVK file format.

DECRYPTION BY PASSWORD = 'key_password'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.Specifies the password required to decrypt a private key that is retrieved from a file. Diese Klausel ist optional, wenn der private Schlüssel nicht durch ein Kennwort geschützt ist.This clause is optional if the private key is protected by a null password. Das Speichern eines privaten Schlüssels in einer Datei ohne Kennwortschutz wird nicht empfohlen.Saving a private key to a file without password protection is not recommended. Falls zwar ein Kennwort erforderlich ist, jedoch keins angegeben wurde, löst die Anweisung einen Fehler aus.If a password is required but no password is specified, the statement fails.

ENCRYPTION BY PASSWORD = 'password'ENCRYPTION BY PASSWORD = 'password'
Gibt das Kennwort an, mit dem der private Schlüssel verschlüsselt werden soll.Specifies the password used to encrypt the private key. Verwenden Sie diese Option nur, wenn Sie das Zertifikat mit einem Kennwort verschlüsseln möchten.Use this option only if you want to encrypt the certificate with a password. Falls diese Klausel ausgelassen wird, wird der private Schlüssel mit dem Datenbank-Hauptschlüssel verschlüsselt.If this clause is omitted, the private key is encrypted using the database master key. password muss den Anforderungen der Windows-Kennwortrichtlinien des Computers entsprechen, auf dem die Instanz von SQL ServerSQL Server ausgeführt wird.password must meet the Windows password policy requirements of the computer that is running the instance of SQL ServerSQL Server. Weitere Informationen finden Sie unter Password Policy.For more information, see Password Policy.

SUBJECT = 'certificate_subject_name'SUBJECT = 'certificate_subject_name'
Der Begriff subject (Betreff) bezieht sich auf ein Feld in den Metadaten des Zertifikats, wie es im X.509-Standard definiert ist.The term subject refers to a field in the metadata of the certificate as defined in the X.509 standard. Er sollte nicht länger als 64 Zeichen sein. Diese Beschränkung wird für SQL ServerSQL Server unter Linux erzwungen.The subject should be no more than 64 characters long, and this limit is enforced for SQL ServerSQL Server on Linux. Der Antragsteller kann für SQL ServerSQL Server unter Windows bis zu 128 Zeichen lang sein.For SQL ServerSQL Server on Windows, the subject can be up to 128 characters long. Betreffe mit mehr als 128 Zeichen werden abgeschnitten, wenn sie im Katalog gespeichert werden. In den BLOB-Daten (Binary Large Object), die das Zertifikat enthalten, ist jedoch der vollständige Name des Antragstellers gespeichert.Subjects that exceed 128 characters are truncated when they are stored in the catalog, but the binary large object (BLOB) that contains the certificate retains the full subject name.

START_DATE = 'datetime'START_DATE = 'datetime'
Das Datum, an dem das Zertifikat gültig wird.Is the date on which the certificate becomes valid. Falls nicht anders angegeben, wird das aktuelle Datum für START_DATE festgelegt.If not specified, START_DATE is set equal to the current date. START_DATE ist in UTC-Zeit und kann in jedem Format angegeben werden, das in ein Datum und eine Uhrzeit konvertiert werden kann.START_DATE is in UTC time and can be specified in any format that can be converted to a date and time.

EXPIRY_DATE = 'datetime'EXPIRY_DATE = 'datetime'
Das Datum, an dem das Zertifikat abläuft.Is the date on which the certificate expires. Falls nicht anders angegeben, wird EXPIRY_DATE auf das Datum ein Jahr nach START_DATE festgelegt.If not specified, EXPIRY_DATE is set to a date one year after START_DATE. EXPIRY_DATE ist in UTC-Zeit und kann in jedem Format angegeben werden, das in ein Datum und eine Uhrzeit konvertiert werden kann.EXPIRY_DATE is in UTC time and can be specified in any format that can be converted to a date and time. SQL ServerSQL Server Service Broker überprüft das Ablaufdatum.Service Broker checks the expiration date. Bei der Sicherung mit Verschlüsselung unter Verwendung von Zertifikaten wird ebenfalls das Ablaufdatum überprüft, und es wird verhindert, dass eine Sicherung mit einem abgelaufenen Zertifikat erstellt wird. Wiederherstellungen mit einem abgelaufenen Zertifikat sind aber möglich.Backup with Encryption using certificates also checks the expiration date and will not allow a new backup to be created with an expired certificate, but will allow restores with an expired certificate. Der Ablauf wird jedoch nicht erzwungen, wenn das Zertifikat für die die Datenbankverschlüsselung oder die Always Encrypted-Funktion verwendet wird.However, expiration is not enforced when the certificate is used for database encryption or Always Encrypted.

ACTIVE FOR BEGIN_DIALOG = { ON | OFF }ACTIVE FOR BEGIN_DIALOG = { ON | OFF }
Stellt das Zertifikat für den Initiator einer Service BrokerService Broker-Dialogkonversation zur Verfügung.Makes the certificate available to the initiator of a Service BrokerService Broker dialog conversation. Der Standardwert ist ON.The default value is ON.

BemerkungenRemarks

Ein Zertifikat ist ein sicherungsfähiges Element auf Datenbankebene, das dem X.509-Standard entspricht und X.509 V1-Felder unterstützt.A certificate is a database-level securable that follows the X.509 standard and supports X.509 V1 fields. CREATE CERTIFICATE kann ein Zertifikat aus einer Datei, einer binären Konstante oder einer Assembly laden.CREATE CERTIFICATE can load a certificate from a file, a binary constant, or an assembly. Mit dieser Anweisung kann auch ein Schlüsselpaar generiert und ein selbstsigniertes Zertifikat erstellt werden.This statement can also generate a key pair and create a self-signed certificate.

Der private Schlüssel muss <= 2500 Byte in einem verschlüsselten Format betragen.The Private Key must be <= 2500 bytes in encrypted format. Private Schlüssel, die von SQL ServerSQL Server generiert werden, umfassen 1024 Bit bis SQL Server 2014 (12.x)SQL Server 2014 (12.x) und ab SQL Server 2016 (13.x)SQL Server 2016 (13.x) 2048 Bit.Private keys generated by SQL ServerSQL Server are 1024 bits long through SQL Server 2014 (12.x)SQL Server 2014 (12.x) and are 2048 bits long beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x). 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.Private keys imported from an external source have a minimum length of 384 bits and a maximum length of 4,096 bits. Die Länge eines importierten privaten Schlüssels muss ein ganzzahliges Produkt von 64 Bits sein.The length of an imported private key must be an integer multiple of 64 bits. Die für TDE verwendeten Zertifikate sind auf die private Schlüsselgröße von 3456 Bits beschränkt.Certificates used for TDE are limited to a private key size of 3456 bits.

Die vollständige Seriennummer des Zertifikats wird gespeichert, aber nur die ersten 16 Byte werden in der sys.certificates-Katalogsicht angezeigt.The entire Serial Number of the certificate is stored but only the first 16 bytes appear in the sys.certificates catalog view.

Das vollständige Feld „Zertifikataussteller“ wird zwar gespeichert, aber nur die ersten 884 Byte werden in der sys.certificates-Katalogsicht angezeigt.The entire Issuer field of the certificate is stored but only the first 884 bytes in the sys.certificates catalog view.

Der private Schlüssel muss dem öffentlichen Schlüssel entsprechen, der mit certificate_name angegeben ist.The private key must correspond to the public key specified by certificate_name.

Beim Erstellen eines Zertifikats aus einem Container ist das Laden des privaten Schlüssels optional.When you create a certificate from a container, loading the private key is optional. Wenn von SQL ServerSQL Server jedoch ein selbstsigniertes Zertifikat generiert wird, wird der private Schlüssel immer erstellt.But when SQL ServerSQL Server generates a self-signed certificate, the private key is always created. Standardmäßig ist der private Schlüssel mit dem Datenbank-Hauptschlüssel verschlüsselt.By default, the private key is encrypted using the database master key. Falls kein Datenbank-Hauptschlüssel vorhanden und kein Kennwort angegeben ist, erzeugt die Anweisung einen Fehler.If the database master key does not exist and no password is specified, the statement fails.

Die ENCRYPTION BY PASSWORD-Option ist nicht erforderlich, wenn der private Schlüssel mit dem Datenbankhauptschlüssel verschlüsselt ist.The ENCRYPTION BY PASSWORD option is not required when the private key is encrypted with the database master key. Verwenden Sie diese Option nur, wenn der private Schlüssel mit einem Kennwort verschlüsselt wird.Use this option only when the private key is encrypted with a password. Falls kein Kennwort angegeben ist, wird der private Schlüssel des Zertifikats mit dem Datenbank-Hauptschlüssel verschlüsselt.If no password is specified, the private key of the certificate will be encrypted using the database master key. Wenn der Datenbank-Hauptschlüssel nicht geöffnet werden kann, wird ein Fehler ausgelöst, wenn Sie diese Klausel auslassen.If the master key of the database cannot be opened, omitting this clause causes an error.

Sie müssen kein Entschlüsselungskennwort angeben, wenn der private Schlüssel mit dem Datenbank-Hauptschlüssel verschlüsselt ist.You do not have to specify a decryption password when the private key is encrypted with the database master key.

Hinweis

Die Ablaufdaten von Zertifikaten werden von integrierten Funktionen für die Verschlüsselung und Signierung nicht überprüft.Built-in functions for encryption and signing do not check the expiration dates of certificates. Benutzer dieser Funktionen müssen entscheiden, wann die Ablaufdaten der Zertifikate überprüft werden sollen.Users of these functions must decide when to check certificate expiration.

Sie können über die Funktionen CERTENCODED (Transact-SQL) und CERTPRIVATEKEY (Transact-SQL) eine binäre Beschreibung eines Zertifikats erstellen.A binary description of a certificate can be created by using the CERTENCODED (Transact-SQL) and CERTPRIVATEKEY (Transact-SQL) functions. Ein Beispiel für die Verwendung von CERTPRIVATEKEY und CERTENCODED zum Kopieren eines Zertifikats in eine andere Datenbank finden Sie in Beispiel B im Artikel CERTENCODED (Transact-SQL).For an example that uses CERTPRIVATEKEY and CERTENCODED to copy a certificate to another database, see example B in the article CERTENCODED (Transact-SQL).

Die Algorithmen MD2, MD4, MD5, SHA und SHA-1 sind ab SQL Server 2016 (13.x)SQL Server 2016 (13.x) veraltet.The MD2, MD4, MD5, SHA, and SHA1 algorithms are deprecated in SQL Server 2016 (13.x)SQL Server 2016 (13.x). Bis SQL Server 2016 (13.x)SQL Server 2016 (13.x) werden selbstsignierte Zertifikate mit SHA-1 erstellt.Up to SQL Server 2016 (13.x)SQL Server 2016 (13.x), a self-signed certificate is created using SHA1. Ab SQL Server 2017 (14.x)SQL Server 2017 (14.x) werden selbstsignierte Zertifikate mit SHA-256 erstellt.Starting with SQL Server 2017 (14.x)SQL Server 2017 (14.x), a self-signed certificate is created using SHA2_256.

BerechtigungenPermissions

Erfordert die CREATE CERTIFICATE-Berechtigung für die Datenbank.Requires CREATE CERTIFICATE permission on the database. Nur Windows-Anmeldenamen, SQL ServerSQL Server-Anmeldenamen und Anwendungsrollen können Zertifikate besitzen.Only Windows logins, SQL ServerSQL Server logins, and application roles can own certificates. Gruppen und Rollen können keine Zertifikate besitzen.Groups and roles cannot own certificates.

BeispieleExamples

A.A. Erstellen eines selbstsignierten ZertifikatsCreating a self-signed certificate

Im folgenden Beispiel wird ein Zertifikat namens Shipping04 erstellt.The following example creates a certificate called Shipping04. Der private Schlüssel dieses Zertifikats wird mit einem Kennwort geschützt.The private key of this certificate is protected using a password.

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

B.B. Erstellen eines Zertifikats aus einer DateiCreating a certificate from a file

Im folgenden Beispiel wird ein Zertifikat in der Datenbank erstellt, wobei das Schlüsselpaar aus Dateien geladen wird.The following example creates a certificate in the database, loading the key pair from files.

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   

Wichtig

Azure SQL-DatenbankAzure SQL Database bietet keine Unterstützung für das Erstellen eines Zertifikats aus einer Datei.does not support creating a certificate from a file.

C.C. Erstellen eines Zertifikats aus einer signierten ausführbaren DateiCreating a certificate from a signed executable file

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.Alternatively, you can create an assembly from the dll file, and then create a certificate from the assembly.

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

Wichtig

Azure SQL-DatenbankAzure SQL Database bietet keine Unterstützung für das Erstellen eines Zertifikats aus einer Datei.does not support creating a certificate from a file.

Wichtig

Ab SQL Server 2017 (14.x)SQL Server 2017 (14.x) verhindert die Serverkonfigurationsoption „CLR Strict Security“ das Laden von Assemblys, ohne diese zuerst deren Sicherheit einzurichten.Starting with SQL Server 2017 (14.x)SQL Server 2017 (14.x), the 'CLR strict security' server configuration option prevents loading assemblies without first setting up the security for them. Laden Sie das Zertifikat, erstellen Sie einen Anmeldenamen, weisen Sie UNSAFE ASSEMBLY diesem Anmeldenamen zu, und laden Sie dann die Assembly.Load the certificate, create a login from it, grant UNSAFE ASSEMBLY to that login, and then load the assembly.

D:D. Erstellen eines selbstsignierten ZertifikatsCreating a self-signed certificate

Das folgende Beispiel erstellt ein Zertifikat mit dem Namen Shipping04, ohne ein Verschlüsselungskennwort anzugeben.The following example creates a certificate called Shipping04 without specifying an encryption password. Dieses Beispiel kann mit Parallel Data WarehouseParallel Data Warehouse verwendet werden.This example can be used with Parallel Data WarehouseParallel Data Warehouse.

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

Weitere InformationenSee Also

ALTER CERTIFICATE (Transact-SQL) ALTER CERTIFICATE (Transact-SQL)
DROP CERTIFICATE (Transact-SQL) DROP CERTIFICATE (Transact-SQL)
BACKUP CERTIFICATE (Transact-SQL) BACKUP CERTIFICATE (Transact-SQL)
Verschlüsselungshierarchie Encryption Hierarchy
EVENTDATA (Transact-SQL) EVENTDATA (Transact-SQL)
CERTENCODED (Transact-SQL) CERTENCODED (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)CERTPRIVATEKEY (Transact-SQL)
CERT_ID (Transact-SQL)CERT_ID (Transact-SQL)
CERTPROPERTY (Transact-SQL)CERTPROPERTY (Transact-SQL)