Udostępnij za pomocą


UTWÓRZ CERTYFIKAT (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL database w usłudze Microsoft Fabric

Dodaje certyfikat do bazy danych w programie SQL Server.

Ta funkcja jest niezgodna z eksportowaniem bazy danych przy użyciu struktury aplikacji warstwy danych (DACFx). Przed wyeksportowaniem należy usunąć wszystkie certyfikaty.

Note

W programie SQL Server 2022 (16.x) można utworzyć kopię zapasową certyfikatów z kluczami prywatnymi lub przywrócić je bezpośrednio do plików lub binarnych obiektów blob przy użyciu par kluczy publicznych (PKCS) #12 lub formatu wymiany informacji osobistych (PFX). Wszystkie certyfikaty generowane przez system mają minimalną siłę RSA-3072 w programie SQL Server 2022 (16.x).

Format PKCS #12 lub PFX jest formatem binarnym do przechowywania certyfikatu serwera, dowolnych certyfikatów pośrednich i klucza prywatnego w jednym pliku. Pliki PFX zwykle mają rozszerzenia, takie jak .pfx i .p12. Ułatwia to klientom przestrzeganie bieżących wytycznych dotyczących najlepszych rozwiązań w zakresie zabezpieczeń i standardów zgodności, które uniemożliwiają szyfrowanie RC4, eliminując konieczność używania narzędzi konwersji, takich jak PVKConverter (w przypadku formatu PVK lub DER).

Transact-SQL konwencje składni

Note

Ta składnia nie jest obsługiwana przez bezserwerową pulę SQL w usłudze 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
To nazwa certyfikatu w bazie danych.

AUTORYZACJA user_name
To nazwa użytkownika, który jest właścicielem tego certyfikatu.

assembly_name ZGROMADZENIA
Określa podpisany zestaw, który został już załadowany do bazy danych.

[ PLIK WYKONYWALNY ] FILE = 'path_to_file'
Określa pełną ścieżkę, w tym nazwę pliku, do pliku zakodowanego w formacie DER, który zawiera certyfikat. Jeśli jest używana opcja WYKONYWALNA, plik jest biblioteką DLL podpisaną przez certyfikat. path_to_file może być ścieżką lokalną lub ścieżką UNC do lokalizacji sieciowej. Plik jest dostępny w kontekście zabezpieczeń konta usługi programu SQL Server. To konto musi mieć wymagane uprawnienia systemu plików.

Important

Usługa Azure SQL Database nie obsługuje tworzenia certyfikatu z pliku ani używania plików kluczy prywatnych.

BINARNOŚĆ = asn_encoded_certificate
Zakodowane w formacie ASN bajty certyfikatu określone jako stała binarna.
Dotyczy: SQL Server 2012 (11.x) i nowsze.

Z FORMATEM = 'PFX'
Dotyczy: PROGRAMU SQL Server 2022 (16.x) i nowszych
Określa generowanie certyfikatu z pliku PFX. Ta klauzula jest opcjonalna.

Z KLUCZEM PRYWATNYM
Określa, że klucz prywatny certyfikatu jest ładowany do programu SQL Server. Ta klauzula jest nieprawidłowa, gdy certyfikat jest tworzony na podstawie zestawu. Aby załadować klucz prywatny certyfikatu utworzonego na podstawie zestawu, użyj polecenia ALTER CERTIFICATE.

PLIK ='path_to_private_key'
Określa pełną ścieżkę, w tym nazwę pliku, do klucza prywatnego. path_to_private_key może być ścieżką lokalną lub ścieżką UNC do lokalizacji sieciowej. Plik jest dostępny w kontekście zabezpieczeń konta usługi programu SQL Server. To konto musi mieć niezbędne uprawnienia systemu plików.

Important

Ta opcja nie jest dostępna w zawartej bazie danych lub w usłudze Azure SQL Database.

BINARNOŚĆ = private_key_bits
Dotyczy: SQL Server (począwszy od programu SQL Server 2012 (11.x)) i usługi Azure SQL Database.

Bity klucza prywatnego określone jako stała binarna. Te bity mogą być w postaci zaszyfrowanej. W przypadku szyfrowania użytkownik musi podać hasło odszyfrowywania. Kontrole zasad haseł nie są wykonywane na tym haśle. Bity klucza prywatnego powinny być w formacie pliku PVK.

ODSZYFROWYWANIE WEDŁUG HASŁA = "key_password"
Określa hasło wymagane do odszyfrowania klucza prywatnego pobranego z pliku. Ta klauzula jest opcjonalna, jeśli klucz prywatny jest chroniony hasłem o wartości null. Zapisywanie klucza prywatnego w pliku bez ochrony haseł nie jest zalecane. Jeśli hasło jest wymagane, ale nie określono hasła, instrukcja kończy się niepowodzeniem.

SZYFROWANIE WEDŁUG HASŁA = "hasło"
Określa hasło używane do szyfrowania klucza prywatnego. Użyj tej opcji tylko wtedy, gdy chcesz zaszyfrować certyfikat hasłem. Jeśli ta klauzula zostanie pominięta, klucz prywatny jest szyfrowany przy użyciu klucza głównego bazy danych. hasło musi spełniać wymagania zasad haseł systemu Windows komputera z uruchomionym wystąpieniem programu SQL Server. Aby uzyskać więcej informacji, zobacz politykę haseł.

TEMAT = "certificate_subject_name"
Termin temat odnosi się do pola w metadanych certyfikatu zgodnie z definicją w standardzie X.509. Temat nie powinien przekraczać 64 znaków i ten limit jest wymuszany dla programu SQL Server w systemie Linux. W przypadku programu SQL Server w systemie Windows temat może mieć maksymalnie 128 znaków. Podmioty, które przekraczają 128 znaków, są obcinane, gdy są przechowywane w wykazie, ale binarny duży obiekt (BLOB), który zawiera certyfikat zachowuje pełną nazwę podmiotu.

START_DATE = "datetime"
To data, w której certyfikat staje się ważny. Jeśli nie zostanie określony, START_DATE jest ustawiona na bieżącą datę. START_DATE jest w czasie UTC i można określić w dowolnym formacie, który można przekonwertować na datę i godzinę.

EXPIRY_DATE = "datetime"
To data wygaśnięcia certyfikatu. Jeśli nie zostanie określony, EXPIRY_DATE jest ustawiona na datę rok po START_DATE. EXPIRY_DATE jest w czasie UTC i można określić w dowolnym formacie, który można przekonwertować na datę i godzinę. Program SQL Server Service Broker sprawdza datę wygaśnięcia. Tworzenie kopii zapasowej za pomocą szyfrowania przy użyciu certyfikatów sprawdza również datę wygaśnięcia i nie zezwala na utworzenie nowej kopii zapasowej z wygasłym certyfikatem, ale umożliwi przywracanie z wygasłym certyfikatem. Jednak wygaśnięcie nie jest wymuszane, gdy certyfikat jest używany do szyfrowania bazy danych lub funkcji Always Encrypted.

AKTYWNE DLA BEGIN_DIALOG = { ON | WYŁ. }
Udostępnia certyfikat inicjatorowi konwersacji dialogowej usługi Service Broker. Wartość domyślna to WŁĄCZONE.

Remarks

Certyfikat jest zabezpieczany na poziomie bazy danych, który jest zgodny ze standardem X.509 i obsługuje pola X.509 V1. CREATE CERTIFICATE może załadować certyfikat z pliku, stałej binarnej lub zestawu. Ta instrukcja może również wygenerować parę kluczy i utworzyć certyfikat z podpisem własnym.

Klucz prywatny musi mieć <wartość = 2500 bajtów w formacie zaszyfrowanym. Klucze prywatne generowane przez program SQL Server mają długość 1024 bitów przez program SQL Server 2014 (12.x) i mają długość 2048 bitów począwszy od programu SQL Server 2016 (13.x). Klucze prywatne importowane ze źródła zewnętrznego mają minimalną długość 384 bitów i maksymalną długość 4096 bitów. Długość zaimportowanego klucza prywatnego musi być liczbą całkowitą wielokrotną 64 bitów. Certyfikaty używane na potrzeby TDE są ograniczone do rozmiaru klucza prywatnego o rozmiarze 3456 bitów.

Cały numer seryjny certyfikatu jest przechowywany, ale w widoku katalogu sys.certificates są wyświetlane tylko pierwsze 16 bajtów.

Całe pole Wystawca certyfikatu jest przechowywane, ale tylko pierwsze 884 bajty w widoku katalogu sys.certificates.

Klucz prywatny musi odpowiadać kluczowi publicznemu określonemu przez certificate_name.

Podczas tworzenia certyfikatu z kontenera ładowanie klucza prywatnego jest opcjonalne. Jednak gdy program SQL Server generuje certyfikat z podpisem własnym, klucz prywatny jest zawsze tworzony. Domyślnie klucz prywatny jest szyfrowany przy użyciu klucza głównego bazy danych. Jeśli klucz główny bazy danych nie istnieje i nie określono hasła, instrukcja zakończy się niepowodzeniem.

Opcja nie jest wymagana ENCRYPTION BY PASSWORD , gdy klucz prywatny jest szyfrowany przy użyciu klucza głównego bazy danych. Użyj tej opcji tylko wtedy, gdy klucz prywatny jest szyfrowany hasłem. Jeśli nie określono hasła, klucz prywatny certyfikatu zostanie zaszyfrowany przy użyciu klucza głównego bazy danych. Jeśli nie można otworzyć klucza głównego bazy danych, pominięcie tej klauzuli powoduje błąd.

Nie musisz określać hasła odszyfrowywania, gdy klucz prywatny jest szyfrowany przy użyciu klucza głównego bazy danych.

Note

Wbudowane funkcje szyfrowania i podpisywania nie sprawdzają dat wygaśnięcia certyfikatów. Użytkownicy tych funkcji muszą zdecydować, kiedy sprawdzić wygaśnięcie certyfikatu.

Opis binarny certyfikatu można utworzyć przy użyciu funkcji CERTENCODED (Transact-SQL) i CERTPRIVATEKEY (Transact-SQL). Przykład, który używa CERTPRIVATEKEY i CERTENCODED do kopiowania certyfikatu do innej bazy danych, zobacz przykład B w artykule CERTENCODED (Transact-SQL).

Algorytmy MD2, MD4, MD5, SHA i SHA1 są przestarzałe w programie SQL Server 2016 (13.x). Do programu SQL Server 2016 (13.x) tworzony jest certyfikat z podpisem własnym przy użyciu algorytmu SHA1. Począwszy od programu SQL Server 2017 (14.x), jest tworzony certyfikat z podpisem własnym przy użyciu SHA2_256.

Permissions

Wymaga uprawnienia CREATE CERTIFICATE do bazy danych. Tylko identyfikatory logowania systemu Windows, identyfikatory logowania programu SQL Server i role aplikacji mogą być właścicielami certyfikatów. Grupy i role nie mogą być właścicielami certyfikatów.

Examples

A. Tworzenie certyfikatu z podpisem własnym

Poniższy przykład tworzy certyfikat o nazwie Shipping04. Klucz prywatny tego certyfikatu jest chroniony przy użyciu hasła.

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

B. Tworzenie certyfikatu na podstawie pliku

Poniższy przykład tworzy certyfikat w bazie danych, ładujący parę kluczy z plików.

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

Usługa Azure SQL Database nie obsługuje tworzenia certyfikatu na podstawie pliku.

C. Tworzenie certyfikatu na podstawie podpisanego pliku wykonywalnego

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

Alternatywnie możesz utworzyć zestaw z dll pliku, a następnie utworzyć certyfikat na podstawie zestawu.

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

Important

Usługa Azure SQL Database nie obsługuje tworzenia certyfikatu na podstawie pliku.

Important

Począwszy od programu SQL Server 2017 (14.x), opcja konfiguracji serwera "CLR strict security" uniemożliwia ładowanie zestawów bez uprzedniego skonfigurowania zabezpieczeń. Załaduj certyfikat, utwórz z niego identyfikator logowania, przyznaj UNSAFE ASSEMBLY temu identyfikatorowi logowania, a następnie załaduj zestaw.

D. Tworzenie certyfikatu z podpisem własnym

Poniższy przykład tworzy certyfikat o nazwie Shipping04 bez określania hasła szyfrowania. Tego przykładu można używać z systemem platformy analizy (PDW).

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

E. Tworzenie certyfikatu na podstawie pliku PFX

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

Zobacz też

CERTYFIKAT ALTERA (Transact-SQL)
CERTYFIKAT DROP (Transact-SQL)
certyfikat kopii zapasowej (Transact-SQL)
Hierarchia szyfrowania
DANE ZDARZEŃ (Transact-SQL)
CERTENCODED (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)
CERT_ID (Transact-SQL)
CERTPROPERTY (Transact-SQL)