Dela via


SKAPA CERTIFIKAT (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-databas i Förhandsversion av Microsoft Fabric

Lägger till ett certifikat i en databas i SQL Server.

Den här funktionen är inte kompatibel med databasexport med hjälp av Data Tier Application Framework (DACFx). Du måste ta bort alla certifikat innan du exporterar.

Note

I SQL Server 2022 (16.x) kan certifikat med privata nycklar säkerhetskopieras eller återställas direkt till och från filer eller binära blobbar med hjälp av PKCS-format (Public Key Pairs) #12 eller PFX(Personal Information Exchange). Alla systemgenererade certifikat har en lägsta styrka på RSA-3072 i SQL Server 2022 (16.x).

PKCS #12- eller PFX-formatet är ett binärt format för lagring av servercertifikatet, eventuella mellanliggande certifikat och den privata nyckeln i en fil. PFX-filer har vanligtvis tillägg som .pfx och .p12. Detta gör det enklare för kunder att följa de aktuella riktlinjerna för bästa praxis för säkerhet och efterlevnadsstandarder som förbjuder RC4-kryptering, genom att eliminera behovet av att använda konverteringsverktyg som PVKConverter (för PVK- eller DER-format).

Transact-SQL syntaxkonventioner

Note

Den här syntaxen stöds inte av en serverlös SQL-pool i 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
Är namnet på certifikatet i databasen.

AUTHORIZATION user_name
Är namnet på den användare som äger det här certifikatet.

ASSEMBLY assembly_name
Anger en signerad sammansättning som redan har lästs in i databasen.

[ KÖRBAR ] FILE = "path_to_file"
Anger den fullständiga sökvägen, inklusive filnamnet, till en DER-kodad fil som innehåller certifikatet. Om alternativet KÖRBAR används är filen en DLL som har signerats av certifikatet. path_to_file kan vara en lokal sökväg eller en UNC-sökväg till en nätverksplats. Filen används i säkerhetskontexten för SQL Server-tjänstkontot. Det här kontot måste ha nödvändiga filsystembehörigheter.

Important

Azure SQL Database har inte stöd för att skapa ett certifikat från en fil eller använda privata nyckelfiler.

BINARY = asn_encoded_certificate
ASN-kodade certifikatbyte som anges som en binär konstant.
gäller för: SQL Server 2012 (11.x) och senare.

MED FORMAT = "PFX"
gäller för: SQL Server 2022 (16.x) och senare
Anger generering av ett certifikat från en PFX-fil. Den här satsen är valfri.

MED PRIVAT NYCKEL
Anger att certifikatets privata nyckel läses in i SQL Server. Den här satsen är ogiltig när certifikatet skapas från en sammansättning. Om du vill läsa in den privata nyckeln för ett certifikat som skapats från en sammansättning använder du ALTER CERTIFICATE.

FILE ='path_to_private_key'
Anger den fullständiga sökvägen, inklusive filnamn, till den privata nyckeln. path_to_private_key kan vara en lokal sökväg eller en UNC-sökväg till en nätverksplats. Filen används i säkerhetskontexten för SQL Server-tjänstkontot. Det här kontot måste ha nödvändiga filsystembehörigheter.

Important

Det här alternativet är inte tillgängligt i en innesluten databas eller i Azure SQL Database.

BINARY = private_key_bits
Gäller för: SQL Server (från och med SQL Server 2012 (11.x)) och Azure SQL Database.

Privata nyckelbitar som anges som binär konstant. Dessa bitar kan vara i krypterad form. Om den är krypterad måste användaren ange ett dekrypteringslösenord. Lösenordsprincipkontroller utförs inte på det här lösenordet. De privata nyckelbitarna ska vara i ett PVK-filformat.

DEKRYPTERING EFTER LÖSENORD = "key_password"
Anger det lösenord som krävs för att dekryptera en privat nyckel som hämtas från en fil. Den här satsen är valfri om den privata nyckeln skyddas av ett null-lösenord. Vi rekommenderar inte att du sparar en privat nyckel i en fil utan lösenordsskydd. Om ett lösenord krävs men inget lösenord har angetts misslyckas instruktionen.

KRYPTERING EFTER LÖSENORD = "lösenord"
Anger lösenordet som används för att kryptera den privata nyckeln. Använd endast det här alternativet om du vill kryptera certifikatet med ett lösenord. Om den här satsen utelämnas krypteras den privata nyckeln med hjälp av databasens huvudnyckel. lösenordet måste uppfylla kraven för Windows-lösenordsprinciper för den dator som kör instansen av SQL Server. Mer information finns i lösenordsprincip.

SUBJECT = "certificate_subject_name"
Termen ämne refererar till ett fält i certifikatets metadata enligt definitionen i X.509-standarden. Ämnet får inte vara längre än 64 tecken och den här gränsen tillämpas för SQL Server i Linux. För SQL Server i Windows kan ämnet vara upp till 128 tecken långt. Ämnen som överskrider 128 tecken trunkeras när de lagras i katalogen, men det binära stora objektet (BLOB) som innehåller certifikatet behåller det fullständiga ämnesnamnet.

START_DATE = "datetime"
Är det datum då certifikatet blir giltigt. Om det inte anges anges START_DATE som det aktuella datumet. START_DATE är i UTC-tid och kan anges i valfritt format som kan konverteras till ett datum och en tid.

EXPIRY_DATE = "datetime"
Är det datum då certifikatet upphör att gälla. Om det inte anges anges EXPIRY_DATE till ett datum ett år efter START_DATE. EXPIRY_DATE är i UTC-tid och kan anges i valfritt format som kan konverteras till ett datum och en tid. SQL Server Service Broker kontrollerar förfallodatumet. Säkerhetskopiering med kryptering med certifikat kontrollerar också förfallodatumet och tillåter inte att en ny säkerhetskopia skapas med ett utgånget certifikat, men tillåter återställningar med ett utgånget certifikat. Förfallodatum tillämpas dock inte när certifikatet används för databaskryptering eller Always Encrypted.

AKTIV FÖR BEGIN_DIALOG = { ON | AV }
Gör certifikatet tillgängligt för initieraren av en dialogkonversation för Service Broker. Standardvärdet är PÅ.

Remarks

Ett certifikat är ett skydd på databasnivå som följer X.509-standarden och stöder X.509 V1-fält. CREATE CERTIFICATE kan läsa in ett certifikat från en fil, en binär konstant eller en sammansättning. Den här instruktionen kan också generera ett nyckelpar och skapa ett självsignerat certifikat.

Den privata nyckeln måste vara <= 2 500 byte i krypterat format. Privata nycklar som genereras av SQL Server är 1 024 bitar långa via SQL Server 2014 (12.x) och är 2 048 bitar långa från och med SQL Server 2016 (13.x). Privata nycklar som importeras från en extern källa har en minsta längd på 384 bitar och en maximal längd på 4 096 bitar. Längden på en importerad privat nyckel måste vara en heltalsmultipel på 64 bitar. Certifikat som används för TDE är begränsade till en privat nyckelstorlek på 3456 bitar.

Hela serienumret för certifikatet lagras men endast de första 16 byteen visas i katalogvyn sys.certificates.

Hela utfärdarfältet för certifikatet lagras men endast de första 884 byteen i katalogvyn sys.certificates.

Den privata nyckeln måste motsvara den offentliga nyckel som anges av certificate_name.

När du skapar ett certifikat från en container är det valfritt att läsa in den privata nyckeln. Men när SQL Server genererar ett självsignerat certifikat skapas alltid den privata nyckeln. Som standard krypteras den privata nyckeln med hjälp av databashuvudnyckeln. Om databashuvudnyckeln inte finns och inget lösenord har angetts misslyckas instruktionen.

Alternativet ENCRYPTION BY PASSWORD krävs inte när den privata nyckeln krypteras med databasens huvudnyckel. Använd endast det här alternativet när den privata nyckeln krypteras med ett lösenord. Om inget lösenord anges krypteras certifikatets privata nyckel med hjälp av databasens huvudnyckel. Om huvudnyckeln för databasen inte kan öppnas orsakar utelämnande av den här satsen ett fel.

Du behöver inte ange ett dekrypteringslösenord när den privata nyckeln krypteras med databasens huvudnyckel.

Note

Inbyggda funktioner för kryptering och signering kontrollerar inte förfallodatum för certifikat. Användare av dessa funktioner måste bestämma när certifikatet ska upphöra att gälla.

En binär beskrivning av ett certifikat kan skapas med hjälp av funktionerna CERTENCODED (Transact-SQL) och CERTPRIVATEKEY (Transact-SQL). Ett exempel som använder CERTPRIVATEKEY och CERTENCODED för att kopiera ett certifikat till en annan databas finns i exempel B i artikeln CERTENCODED (Transact-SQL).

Algoritmerna MD2, MD4, MD5, SHA och SHA1 är inaktuella i SQL Server 2016 (13.x). Fram till SQL Server 2016 (13.x) skapas ett självsignerat certifikat med SHA1. Från och med SQL Server 2017 (14.x) skapas ett självsignerat certifikat med hjälp av SHA2_256.

Permissions

Kräver CREATE CERTIFICATE behörighet för databasen. Endast Windows-inloggningar, SQL Server-inloggningar och programroller kan äga certifikat. Grupper och roller kan inte äga certifikat.

Examples

A. Skapa ett självsignerat certifikat

I följande exempel skapas ett certifikat med namnet Shipping04. Den privata nyckeln för det här certifikatet skyddas med ett lösenord.

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

B. Skapa ett certifikat från en fil

I följande exempel skapas ett certifikat i databasen som läser in nyckelparet från filer.

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 har inte stöd för att skapa ett certifikat från en fil.

C. Skapa ett certifikat från en signerad körbar fil

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

Du kan också skapa en sammansättning från dll filen och sedan skapa ett certifikat från sammansättningen.

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 har inte stöd för att skapa ett certifikat från en fil.

Important

Från och med SQL Server 2017 (14.x) förhindrar serverkonfigurationsalternativet "CLR strikt säkerhet" att inläsning av sammansättningar utan att först konfigurera säkerheten för dem. Läs in certifikatet, skapa en inloggning från det, bevilja UNSAFE ASSEMBLY till inloggningen och läs sedan in sammansättningen.

D. Skapa ett självsignerat certifikat

I följande exempel skapas ett certifikat med namnet Shipping04 utan att ange ett krypteringslösenord. Det här exemplet kan användas med Analytics Platform System (PDW).

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

E. Skapa ett certifikat från en PFX-fil

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)
SLÄPP CERTIFIKAT (Transact-SQL)
SÄKERHETSKOPIERINGSCERTIFIKAT (Transact-SQL)
Encryption Hierarchy
EVENTDATA (Transact-SQL)
CERTENCODED (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)
CERT_ID (Transact-SQL)
CERTPROPERTY (Transact-SQL)