Udostępnij za pośrednictwem


TWORZENIE KLUCZA SYMETRYCZNEGO (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsBaza danych SQL w usłudze Microsoft Fabric (wersja zapoznawcza)

Generuje klucz symetryczny i określa jego właściwości 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 klucze symetryczne.

Transact-SQL konwencje składni

Note

Ta składnia nie jest obsługiwana przez bezserwerową pulę SQL w usłudze Azure Synapse Analytics.

Syntax

CREATE SYMMETRIC KEY key_name
    [ AUTHORIZATION owner_name ]
    [ FROM PROVIDER provider_name ]
    WITH
        [
            <key_options> [ , ... n ]
            | ENCRYPTION BY <encrypting_mechanism> [ , ... n ]
        ]

<key_options> ::=
    KEY_SOURCE = 'pass_phrase'
    | ALGORITHM = <algorithm>
    | IDENTITY_VALUE = 'identity_phrase'
    | PROVIDER_KEY_NAME = 'key_name_in_provider'
    | CREATION_DISPOSITION = { CREATE_NEW | OPEN_EXISTING }

<algorithm> ::=
    DES | TRIPLE_DES | TRIPLE_DES_3KEY | RC2 | RC4 | RC4_128
    | DESX | AES_128 | AES_192 | AES_256

<encrypting_mechanism> ::=
    CERTIFICATE certificate_name
    | PASSWORD = 'password'
    | SYMMETRIC KEY symmetric_key_name
    | ASYMMETRIC KEY asym_key_name

Arguments

key_name

Określa unikatową nazwę, za pomocą której klucz symetryczny jest znany w bazie danych. Jest to wymagany parametr. Klucze tymczasowe są wyznaczane, gdy key_name zaczyna się od jednego znaku cyfry (#). Na przykład #temporaryKey900007. Nie można utworzyć klucza symetrycznego, który ma nazwę rozpoczynającą się od więcej niż jednego #. Nie można utworzyć tymczasowego klucza symetrycznego przy użyciu dostawcy EKM.

AUTHORIZATION owner_name

Określa nazwę użytkownika bazy danych lub roli aplikacji, która jest właścicielem tego klucza.

FROM PROVIDER provider_name

Określa dostawcę i nazwę rozszerzalnego zarządzania kluczami (EKM). Klucz nie jest eksportowany z urządzenia EKM. Dostawca musi być zdefiniowany jako pierwszy przy użyciu instrukcji CREATE PROVIDER . Aby uzyskać więcej informacji na temat tworzenia zewnętrznych dostawców kluczy, zobacz Extensible Key Management (EKM).

Note

Ta opcja nie jest dostępna w zawartej bazie danych.

KEY_SOURCE = "pass_phrase"

Określa hasło, z którego ma pochodzić klucz.

IDENTITY_VALUE = "identity_phrase"

Określa frazę tożsamości, z której ma być generowany identyfikator GUID do oznaczania danych zaszyfrowanych przy użyciu klucza tymczasowego.

PROVIDER_KEY_NAME = 'key_name_in_provider'

Określa nazwę przywołyną w dostawcy rozszerzonego zarządzania kluczami.

Note

Ta opcja nie jest dostępna w zawartej bazie danych.

CREATION_DISPOSITION = { CREATE_NEW | OPEN_EXISTING }

Tworzy lub mapuje klucz symetryczny na urządzenie do rozszerzonego zarządzania kluczami.

  • CREATE_NEW

    Tworzy nowy klucz na urządzeniu do zarządzania kluczami rozszerzalnymi. Jeśli klucz już istnieje na urządzeniu, instrukcja kończy się niepowodzeniem z powodu błędu.

  • OPEN_EXISTING

    Mapuje klucz symetryczny programu SQL Server na istniejący rozszerzalny klucz zarządzania kluczami. Jeśli CREATION_DISPOSITION = OPEN_EXISTING nie zostanie podana wartość domyślna, zostanie ustawiona wartość CREATE_NEW.

certificate_name

Określa nazwę certyfikatu używanego do szyfrowania klucza symetrycznego. Certyfikat musi już istnieć w bazie danych.

'password'

Określa hasło, z którego ma pochodzić klucz TRIPLE_DES, za pomocą którego należy zabezpieczyć klucz symetryczny. password musi spełniać wymagania zasad haseł systemu Windows komputera z uruchomionym wystąpieniem programu SQL Server. Zawsze używaj silnych haseł.

symmetric_key_name

Określa klucz symetryczny używany do szyfrowania tworzonego klucza. Określony klucz musi już istnieć w bazie danych, a klucz musi być otwarty.

asym_key_name

Określa klucz asymetryczny używany do szyfrowania tworzonego klucza. Ten klucz asymetryczny musi już istnieć w bazie danych.

<algorytm>

Określ algorytm szyfrowania.

Warning

Począwszy od programu SQL Server 2016 (13.x), wszystkie algorytmy inne niż AES_128, AES_192 i AES_256 są przestarzałe. Aby użyć starszych algorytmów (niezalecane), musisz ustawić bazę danych na poziom zgodności bazy danych 120 lub niższy.

Remarks

Po utworzeniu klucza symetrycznego klucz symetryczny musi zostać zaszyfrowany przy użyciu co najmniej jednej z następujących opcji:

  • certyfikat
  • hasło
  • symmetric key
  • asymmetric key
  • PROVIDER

Klucz może mieć więcej niż jedno szyfrowanie każdego typu. Innymi słowy, pojedynczy klucz symetryczny może być szyfrowany przy użyciu wielu certyfikatów, haseł, kluczy symetrycznych i kluczy asymetrycznych jednocześnie.

Aby chronić materiał klucza symetrycznego, program SQL Server i usługa Azure SQL przechowują materiał klucza w postaci zaszyfrowanej. W przeszłości to szyfrowanie korzystało z trybu wypełnienia PKCS#1 w wersji 1.5; Począwszy od poziomu zgodności bazy danych 170, szyfrowanie używa trybu wypełnienia OAEP-256 na potrzeby szyfrowania według certyfikatu lub klucza asymetrycznego. W dm_database_encryption_keyspliku encryptor_type element będzie wyświetlany jako CERTIFICATE_OAEP_256 zamiast CERTIFICATE.

Caution

Gdy klucz symetryczny jest szyfrowany przy użyciu hasła zamiast certyfikatu (lub innego klucza), algorytm szyfrowania TRIPLE DES jest używany do szyfrowania hasła. W związku z tym klucze tworzone za pomocą silnego algorytmu szyfrowania, takiego jak AES, są zabezpieczone przez słabszy algorytm.

Opcjonalne hasło może służyć do szyfrowania klucza symetrycznego przed dystrybucją klucza do wielu użytkowników.

Klucze tymczasowe są własnością użytkownika, który je tworzy. Klucze tymczasowe są prawidłowe tylko dla bieżącej sesji.

IDENTITY_VALUE Generuje identyfikator GUID, za pomocą którego mają być tagowane dane zaszyfrowane przy użyciu nowego klucza symetrycznego. Tego tagowania można używać do dopasowywania kluczy do zaszyfrowanych danych. Identyfikator GUID wygenerowany przez określoną frazę jest zawsze taki sam. Po wygenerowaniu identyfikatora GUID frazy nie można użyć ponownie, o ile w tej bazie danych znajduje się co najmniej jeden klucz symetryczny, który aktywnie używa frazy. IDENTITY_VALUE jest klauzulą opcjonalną; zalecamy jednak użycie go podczas przechowywania danych zaszyfrowanych przy użyciu klucza tymczasowego.

Nie ma domyślnego algorytmu szyfrowania.

Important

Nie zalecamy używania szyfrów strumienia RC4 i RC4_128 w celu ochrony poufnych danych. Program SQL Server nie koduje jeszcze bardziej szyfrowania wykonywanego przy użyciu takich kluczy.

Informacje o kluczach symetrycznych są widoczne w widoku katalogu sys.symmetric_keys .

Klucze symetryczne nie mogą być szyfrowane za pomocą kluczy symetrycznych utworzonych przez dostawcę szyfrowania.

Wyjaśnienie dotyczące algorytmów DES

  • DESX został niepoprawnie nazwany. Klucze symetryczne utworzone za pomocą algorytmu = DESX używają szyfrowania TRIPLE DES z 192-bitowym kluczem. Nie podano algorytmu DESX. Ta funkcja zostanie usunięta w przyszłej wersji programu SQL Server. Unikaj używania tej funkcji w nowych pracach programistycznych i zaplanuj modyfikowanie aplikacji, które obecnie korzystają z tej funkcji.
  • Klucze symetryczne utworzone za pomocą algorytmu = TRIPLE_DES_3KEY używać funkcji TRIPLE DES z 192-bitowym kluczem.
  • Klucze symetryczne utworzone za pomocą algorytmu = TRIPLE_DES używać funkcji TRIPLE DES z 128-bitowym kluczem.

Wycofanie algorytmu RC4

Powtarzające się użycie tego samego RC4 lub RC4_128 KEY_GUID w różnych blokach danych powoduje automatyczne użycie tego samego klucza RC4, ponieważ program SQL Server nie zapewnia soli automatycznie. Używanie tego samego klucza RC4 wielokrotnie jest dobrze znanym błędem, który powoduje bardzo słabe szyfrowanie. Dlatego mamy przestarzałe słowa kluczowe RC4 i RC4_128. Ta funkcja zostanie usunięta w przyszłej wersji programu SQL Server. Unikaj używania tej funkcji w nowych pracach programistycznych i zaplanuj modyfikowanie aplikacji, które obecnie korzystają z tej funkcji.

Warning

Algorytm RC4 jest obsługiwany tylko w przypadku zgodności z poprzednimi wersjami. Nowy materiał można szyfrować tylko przy użyciu wersji RC4 lub RC4_128, gdy baza danych jest zgodna z poziomem zgodności 90 lub 100. (Niezalecane). Zamiast tego użyj nowszego algorytmu, takiego jak jeden z algorytmów AES. W programie SQL Server materiał zaszyfrowany przy użyciu wersji RC4 lub RC4_128 można odszyfrować na dowolnym poziomie zgodności.

Permissions

Wymaga uprawnienia ALTER ANY SYMMETRIC KEY w bazie danych. W przypadku AUTHORIZATION określenia parametru wymaga uprawnienia IMPERSONATE dla użytkownika bazy danych lub uprawnienia ALTER w roli aplikacji. Jeśli szyfrowanie odbywa się przy użyciu certyfikatu lub klucza asymetrycznego, wymaga uprawnień do wyświetlania definicji certyfikatu lub klucza asymetrycznego. Tylko identyfikatory logowania systemu Windows, identyfikatory logowania programu SQL Server i role aplikacji mogą być właścicielami kluczy symetrycznych. Grupy i role nie mogą być właścicielami kluczy symetrycznych.

Examples

A. Tworzenie klucza symetrycznego

Poniższy przykład tworzy klucz symetryczny o nazwie JanainaKey09 przy użyciu algorytmu AES 256 , a następnie szyfruje nowy klucz przy użyciu certyfikatu Shipping04.

CREATE SYMMETRIC KEY JanainaKey09
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE Shipping04;
GO

B. Tworzenie tymczasowego klucza symetrycznego

Poniższy przykład tworzy tymczasowy klucz symetryczny wywoływany #MarketingXXV z hasła: The square of the hypotenuse is equal to the sum of the squares of the sides. Klucz jest aprowizowany za pomocą identyfikatora GUID wygenerowanego na podstawie ciągu Pythagoras i zaszyfrowany przy użyciu certyfikatu Marketing25.

CREATE SYMMETRIC KEY #MarketingXXV
WITH ALGORITHM = AES_128,
KEY_SOURCE
     = 'The square of the hypotenuse is equal to the sum of the squares of the sides',
IDENTITY_VALUE = 'Pythagoras'
ENCRYPTION BY CERTIFICATE Marketing25;
GO

C. Tworzenie klucza symetrycznego przy użyciu urządzenia extensible Key Management (EKM)

Poniższy przykład tworzy klucz symetryczny o nazwie MySymKey przy użyciu dostawcy o nazwie MyEKMProvider i nazwy KeyForSensitiveDataklucza . Przypisuje autoryzację i User1 zakłada, że administrator systemu zarejestrował już dostawcę o nazwie MyEKMProvider w programie SQL Server.

CREATE SYMMETRIC KEY MySymKey
AUTHORIZATION User1
FROM PROVIDER EKMProvider
WITH
PROVIDER_KEY_NAME='KeyForSensitiveData',
CREATION_DISPOSITION=OPEN_EXISTING;
GO