Delen via


CREATE CERTIFICATE (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-database in Microsoft Fabric Preview

Hiermee voegt u een certificaat toe aan een database in SQL Server.

Deze functie is niet compatibel met databaseexport met BEHULP van DACFx (Data Tier Application Framework). U moet alle certificaten verwijderen voordat u exporteert.

Note

In SQL Server 2022 (16.x) kunnen certificaten met persoonlijke sleutels rechtstreeks worden gemaakt of hersteld van bestanden of binaire blobs met behulp van de PKCS-indeling (Public Key Pairs) #12 of PFX (Personal Information Exchange). Alle door het systeem gegenereerde certificaten hebben een minimale sterkte van RSA-3072 in SQL Server 2022 (16.x).

De PKCS #12- of PFX-indeling is een binaire indeling voor het opslaan van het servercertificaat, tussenliggende certificaten en de persoonlijke sleutel in één bestand. PFX-bestanden hebben meestal extensies zoals .pfx en .p12. Dit maakt het voor klanten gemakkelijker om te voldoen aan de huidige richtlijnen en nalevingsstandaarden voor beveiliging die RC4-versleuteling verbieden door de noodzaak om conversiehulpprogramma's zoals PVK Converter (voor de PVK- of DER-indeling) te gebruiken.

Transact-SQL syntaxis-conventies

Note

Deze syntaxis wordt niet ondersteund door een serverloze SQL-pool in Azure Synapse Analytics.

Syntax

-- 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 [FORMAT = 'PFX',]
          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'  

Arguments

certificate_name
Is de naam voor het certificaat in de database.

AUTHORIZATION user_name
Is de naam van de gebruiker die eigenaar is van dit certificaat.

ASSEMBLY assembly_name
Hiermee geeft u een ondertekende assembly op die al in de database is geladen.

[ UITVOERBAAR ] FILE = 'path_to_file'
Hiermee geeft u het volledige pad, inclusief bestandsnaam, op naar een DER-gecodeerd bestand dat het certificaat bevat. Als de optie UITVOERBAAR wordt gebruikt, is het bestand een DLL die is ondertekend door het certificaat. path_to_file kan een lokaal pad of een UNC-pad naar een netwerklocatie zijn. Het bestand wordt geopend in de beveiligingscontext van het SQL Server-serviceaccount. Dit account moet over de vereiste bestandssysteemmachtigingen beschikken.

Important

Azure SQL Database biedt geen ondersteuning voor het maken van een certificaat van een bestand of het gebruik van persoonlijke-sleutelbestanden.

BINARY = asn_encoded_certificate
Met ASN gecodeerde certificaatbytes die zijn opgegeven als een binaire constante.
Van toepassing op: SQL Server 2012 (11.x) en hoger.

WITH FORMAT = 'PFX'
Van toepassing op: SQL Server 2022 (16.x) en hoger
Hiermee geeft u het genereren van een certificaat van een PFX-bestand. Deze component is optioneel.

MET PERSOONLIJKE SLEUTEL
Hiermee geeft u op dat de persoonlijke sleutel van het certificaat wordt geladen in SQL Server. Deze component is ongeldig wanneer het certificaat wordt gemaakt op basis van een assembly. Als u de persoonlijke sleutel van een certificaat wilt laden dat is gemaakt op basis van een assembly, gebruikt u ALTER CERTIFICATE.

FILE ='path_to_private_key'
Hiermee geeft u het volledige pad, inclusief bestandsnaam, op de persoonlijke sleutel. path_to_private_key kan een lokaal pad of een UNC-pad naar een netwerklocatie zijn. Het bestand wordt geopend in de beveiligingscontext van het SQL Server-serviceaccount. Dit account moet over de benodigde bestandssysteemmachtigingen beschikken.

Important

Deze optie is niet beschikbaar in een ingesloten database of in Azure SQL Database.

BINARY = private_key_bits
Van toepassing op: SQL Server (te beginnen met SQL Server 2012 (11.x)) en Azure SQL Database.

Privésleutel-bits die zijn opgegeven als binaire constante. Deze bits kunnen in versleutelde vorm worden gebruikt. Indien versleuteld, moet de gebruiker een ontsleutelingswachtwoord opgeven. Er worden geen controles voor wachtwoordbeleid uitgevoerd op dit wachtwoord. De privésleutel-bits moeten een PVK-bestandsindeling hebben.

ONTSLEUTELING PER WACHTWOORD = 'key_password'
Hiermee geeft u het wachtwoord op dat is vereist voor het ontsleutelen van een persoonlijke sleutel die wordt opgehaald uit een bestand. Deze component is optioneel als de persoonlijke sleutel wordt beveiligd met een null-wachtwoord. Het is niet raadzaam om een persoonlijke sleutel op te slaan in een bestand zonder wachtwoordbeveiliging. Als een wachtwoord is vereist, maar er geen wachtwoord is opgegeven, mislukt de instructie.

VERSLEUTELING PER WACHTWOORD = 'wachtwoord'
Hiermee geeft u het wachtwoord op dat wordt gebruikt voor het versleutelen van de persoonlijke sleutel. Gebruik deze optie alleen als u het certificaat wilt versleutelen met een wachtwoord. Als deze component wordt weggelaten, wordt de persoonlijke sleutel versleuteld met behulp van de hoofdsleutel van de database. het wachtwoord moet voldoen aan de windows-wachtwoordbeleidsvereisten van de computer waarop het exemplaar van SQL Server wordt uitgevoerd. Zie Wachtwoordbeleidvoor meer informatie.

ONDERWERP = 'certificate_subject_name'
Het onderwerp van de term verwijst naar een veld in de metagegevens van het certificaat, zoals gedefinieerd in de X.509-standaard. Het onderwerp mag niet langer zijn dan 64 tekens en deze limiet wordt afgedwongen voor SQL Server in Linux. Voor SQL Server in Windows kan het onderwerp maximaal 128 tekens lang zijn. Onderwerpen die langer zijn dan 128 tekens, worden afgekapt wanneer ze worden opgeslagen in de catalogus, maar het binaire grote object (BLOB) dat het certificaat bevat, behoudt de volledige onderwerpnaam.

START_DATE = 'datum/tijd'
Is de datum waarop het certificaat geldig wordt. Als dit niet is opgegeven, wordt START_DATE gelijk aan de huidige datum ingesteld. START_DATE in UTC-tijd is en kan worden opgegeven in elke indeling die kan worden geconverteerd naar een datum en tijd.

EXPIRY_DATE = 'datum/tijd'
Is de datum waarop het certificaat verloopt. Als dit niet is opgegeven, wordt EXPIRY_DATE ingesteld op een datum één jaar na START_DATE. EXPIRY_DATE in UTC-tijd is en kan worden opgegeven in elke indeling die kan worden geconverteerd naar een datum en tijd. SQL Server Service Broker controleert de vervaldatum. Back-up met versleuteling met behulp van certificaten controleert ook de vervaldatum en staat niet toe dat er een nieuwe back-up wordt gemaakt met een verlopen certificaat, maar staat herstelbewerkingen toe met een verlopen certificaat. Vervaldatum wordt echter niet afgedwongen wanneer het certificaat wordt gebruikt voor databaseversleuteling of Always Encrypted.

ACTIEF VOOR BEGIN_DIALOG = { AAN | UIT }
Het certificaat beschikbaar maken voor de initiator van een Service Broker-dialoogvenster. De standaardwaarde is AAN.

Remarks

Een certificaat is een beveiligbaar op databaseniveau dat de X.509-standaard volgt en X.509 V1-velden ondersteunt. CREATE CERTIFICATE kan een certificaat laden uit een bestand, een binaire constante of een assembly. Met deze instructie kunt u ook een sleutelpaar genereren en een zelfondertekend certificaat maken.

De persoonlijke sleutel moet = 2500 bytes in versleutelde indeling zijn <. Persoonlijke sleutels die door SQL Server worden gegenereerd, zijn 1024 bits lang tot en met SQL Server 2014 (12.x) en zijn 2048 bits lang vanaf SQL Server 2016 (13.x). Persoonlijke sleutels die uit een externe bron worden geïmporteerd, hebben een minimale lengte van 384 bits en een maximale lengte van 4.096 bits. De lengte van een geïmporteerde persoonlijke sleutel moet een geheel getal van 64 bits zijn. Certificaten die worden gebruikt voor TDE, zijn beperkt tot een persoonlijke sleutelgrootte van 3456 bits.

Het volledige serienummer van het certificaat wordt opgeslagen, maar alleen de eerste 16 bytes worden weergegeven in de catalogusweergave sys.certificates.

Het hele veld Issuer van het certificaat wordt opgeslagen, maar alleen de eerste 884 bytes in de catalogusweergave sys.certificates.

De persoonlijke sleutel moet overeenkomen met de openbare sleutel die is opgegeven door certificate_name.

Wanneer u een certificaat van een container maakt, is het laden van de persoonlijke sleutel optioneel. Maar wanneer SQL Server een zelfondertekend certificaat genereert, wordt de persoonlijke sleutel altijd gemaakt. De persoonlijke sleutel wordt standaard versleuteld met behulp van de hoofdsleutel van de database. Als de hoofdsleutel van de database niet bestaat en er geen wachtwoord is opgegeven, mislukt de instructie.

De ENCRYPTION BY PASSWORD optie is niet vereist wanneer de persoonlijke sleutel is versleuteld met de hoofdsleutel van de database. Gebruik deze optie alleen als de persoonlijke sleutel is versleuteld met een wachtwoord. Als er geen wachtwoord is opgegeven, wordt de persoonlijke sleutel van het certificaat versleuteld met behulp van de hoofdsleutel van de database. Als de hoofdsleutel van de database niet kan worden geopend, veroorzaakt het weglaten van deze component een fout.

U hoeft geen ontsleutelingswachtwoord op te geven wanneer de persoonlijke sleutel is versleuteld met de hoofdsleutel van de database.

Note

Ingebouwde functies voor versleuteling en ondertekening controleren niet de vervaldatums van certificaten. Gebruikers van deze functies moeten bepalen wanneer het verlopen van het certificaat moet worden gecontroleerd.

Een binaire beschrijving van een certificaat kan worden gemaakt met behulp van de functies CERTENCODED (Transact-SQL) en CERTPRIVATEKEY (Transact-SQL). Zie voorbeeld B in het artikel CERTENCODED (Transact-SQL) voor een voorbeeld waarin CERTPRIVATEKEY en CERTENCODED worden gebruikt om een certificaat naar een andere database te kopiëren.

De MD2-, MD4-, MD5-, SHA- en SHA1-algoritmen zijn afgeschaft in SQL Server 2016 (13.x). Tot SQL Server 2016 (13.x) wordt een zelfondertekend certificaat gemaakt met SHA1. Vanaf SQL Server 2017 (14.x) wordt een zelfondertekend certificaat gemaakt met behulp van SHA2_256.

Permissions

Vereist CREATE CERTIFICATE machtiging voor de database. Alleen Windows-aanmeldingen, SQL Server-aanmeldingen en toepassingsrollen kunnen eigenaar zijn van certificaten. Groepen en rollen kunnen geen eigen certificaten hebben.

Examples

A. Een zelfondertekend certificaat maken

In het volgende voorbeeld wordt een certificaat gemaakt met de naam Shipping04. De persoonlijke sleutel van dit certificaat wordt beveiligd met een wachtwoord.

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

B. Een certificaat maken op basis van een bestand

In het volgende voorbeeld wordt een certificaat in de database gemaakt, waarbij het sleutelpaar uit bestanden wordt geladen.

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   

Important

Azure SQL Database biedt geen ondersteuning voor het maken van een certificaat van een bestand.

C. Een certificaat maken op basis van een ondertekend uitvoerbaar bestand

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

U kunt ook een assembly maken op basis van het dll bestand en vervolgens een certificaat maken op basis van de assembly.

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

Important

Azure SQL Database biedt geen ondersteuning voor het maken van een certificaat van een bestand.

Important

Vanaf SQL Server 2017 (14.x) voorkomt de configuratieoptie 'CLR strict security' server het laden van assembly's zonder eerst de beveiliging hiervoor in te stellen. Laad het certificaat, maak er een aanmelding van, verdeel UNSAFE ASSEMBLY deze aan die aanmelding en laad vervolgens de assembly.

D. Een zelfondertekend certificaat maken

In het volgende voorbeeld wordt een certificaat gemaakt dat wordt aangeroepen Shipping04 zonder een versleutelingswachtwoord op te geven. Dit voorbeeld kan worden gebruikt met Analytics Platform System (PDW).

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

E. Een certificaat maken op basis van een PFX-bestand

CREATE CERTIFICATE Shipping04
    FROM FILE = 'c:\storedcerts\shipping04cert.pfx'
    WITH 
    FORMAT = 'PFX', 
	PRIVATE KEY (
        DECRYPTION BY PASSWORD = '9n34khUbhk$w4ecJH5gh'
	);  

See Also

ALTER CERTIFICATE (Transact-SQL)
DROP CERTIFICATE (Transact-SQL)
BACK-UPCERTIFICAAT (Transact-SQL)
Encryption Hierarchy
EVENTDATA (Transact-SQL)
CERTENCODED (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)
CERT_ID (Transact-SQL)
CERTPROPERTY (Transact-SQL)