Udostępnij za pośrednictwem


Tworzenie identycznych kluczy symetrycznych na dwóch serwerach

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

W tym temacie opisano sposób tworzenia identycznych kluczy symetrycznych na dwóch różnych serwerach w programie SQL Server przy użyciu języka Transact-SQL. Aby odszyfrować szyfr, potrzebny jest klucz, który został użyty do jego zaszyfrowania. Gdy zarówno szyfrowanie, jak i odszyfrowywanie występuje w pojedynczej bazie danych, klucz jest przechowywany w bazie danych i jest dostępny w zależności od uprawnień zarówno do szyfrowania, jak i odszyfrowywania. Jednak w przypadku szyfrowania i odszyfrowywania w oddzielnych bazach danych lub na oddzielnych serwerach klucz przechowywany w jednej bazie danych nie jest dostępny do użycia w drugiej bazie danych.

Przed rozpoczęciem

Ograniczenia i ograniczenia

  • Po utworzeniu klucza symetrycznego klucz symetryczny musi być zaszyfrowany przy użyciu co najmniej jednego z następujących elementów: certyfikat, hasło, klucz symetryczny, klucz asymetryczny lub DOSTAWCA. 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.

  • Gdy klucz symetryczny jest szyfrowany przy użyciu hasła zamiast klucza publicznego klucza głównego bazy danych, używany jest algorytm szyfrowania TRIPLE DES. W związku z tym klucze tworzone za pomocą silnego algorytmu szyfrowania, takiego jak AES, są zabezpieczone przez słabszy algorytm.

Bezpieczeństwo

Uprawnienia

Wymaga uprawnienia ALTER ANY SYMMETRIC KEY w bazie danych. Jeśli określono autoryzację, 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.

Korzystanie z Transact-SQL

Aby utworzyć identyczne klucze symetryczne na dwóch różnych serwerach

  1. W Eksploratorze obiektów , nawiąż połączenie z wystąpieniem silnika bazy danych.

  2. Na pasku Standardowa kliknij pozycję Nowe zapytanie.

  3. Utwórz klucz, uruchamiając następujące instrukcje CREATE MASTER KEY, CREATE CERTIFICATE i CREATE SYMMETRIC KEY. Zastąp <password> prawidłowym hasłem.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';  
    GO  
    CREATE CERTIFICATE [cert_keyProtection] WITH SUBJECT = 'Key Protection';  
    GO  
    CREATE SYMMETRIC KEY [key_DataShare] WITH  
        KEY_SOURCE = 'My key generation bits. This is a shared secret!',  
        ALGORITHM = AES_256,   
        IDENTITY_VALUE = 'Key Identity generation bits. Also a shared secret'  
        ENCRYPTION BY CERTIFICATE [cert_keyProtection];  
    GO  
    
  4. Połącz się z oddzielnym wystąpieniem serwera, otwórz inne okno zapytania i uruchom powyższe instrukcje SQL, aby utworzyć ten sam klucz na drugim serwerze.

  5. Przetestuj klucze, uruchamiając najpierw instrukcję OPEN SYMMETRIC KEY i instrukcję SELECT poniżej na pierwszym serwerze.

    OPEN SYMMETRIC KEY [key_DataShare]   
        DECRYPTION BY CERTIFICATE cert_keyProtection;  
    GO  
    SELECT encryptbykey(key_guid('key_DataShare'), 'MyData' )  
    GO  
    -- For example, the output might look like this: 0x2152F8DA8A500A9EDC2FAE26D15C302DA70D25563DAE7D5D1102E3056CE9EF95CA3E7289F7F4D0523ED0376B155FE9C3  
    
  6. Na drugim serwerze wklej wynik poprzedniej instrukcji SELECT do następującego kodu jako wartość @blob i uruchom następujący kod, aby sprawdzić, czy zduplikowany klucz może odszyfrować szyfr.

    OPEN SYMMETRIC KEY [key_DataShare]   
        DECRYPTION BY CERTIFICATE cert_keyProtection;  
    GO  
    DECLARE @blob varbinary(8000);  
    SELECT CONVERT(varchar(8000), decryptbykey(@blob));  
    GO  
    
  7. Zamknij klucz symetryczny na obu serwerach.

    CLOSE SYMMETRIC KEY [key_DataShare];  
    GO  
    

Zmiany szyfrowania w programie SQL Server 2017 CU2

Program SQL Server 2016 używa algorytmu wyznaczania skrótu SHA1 na potrzeby działania szyfrowania. Począwszy od programu SQL Server 2017, zamiast tego jest używany algorytm SHA2. Oznacza to, że konieczne może być wykonanie dodatkowych kroków, aby instalacja programu SQL Server 2017 odszyfrowała elementy, które zostały zaszyfrowane przez program SQL Server 2016. Oto dodatkowe kroki:

  • Upewnij się, że program SQL Server 2017 został zaktualizowany do co najmniej aktualizacji zbiorczej 2 (CU2).
  • Po zainstalowaniu aktualizacji CU2 włącz flagę śledzenia 4631 w programie SQL Server 2017: DBCC TRACEON(4631, -1);
    • Flaga śledzenia 4631 jest nowa w programie SQL Server 2017. Flaga śledzenia 4631 musi być ustawiona na ON na poziomie globalnym, zanim utworzysz klucz główny, certyfikat lub klucz symetryczny w programie SQL Server 2017. Dzięki temu te utworzone elementy mogą współdziałać z programem SQL Server 2016 i starszymi wersjami. Ta flaga śledzenia powinna być włączona tylko tymczasowo w celu ponownego szyfrowania danych przy użyciu kluczy pochodnych SHA2.

Aby uzyskać więcej informacji, zobacz:

Zobacz też