Udostępnij za pośrednictwem


Samouczek: rozpoczynanie korzystania z funkcji Always Encrypted z enklawami Intel SGX w usłudze Azure SQL Database

Dotyczy: Azure SQL Database

W tym samouczku pokazano, jak rozpocząć pracę z funkcją Always Encrypted z bezpiecznymi enklawami w usłudze Azure SQL Database. Użyjesz enklaw Intel Software Guard Extensions (Intel SGX). Zostaną wyświetlone:

  • Jak utworzyć środowisko do testowania i oceniania funkcji Always Encrypted za pomocą enklaw Intel SGX.
  • Jak szyfrować dane w miejscu i wystawiać zaawansowane poufne zapytania względem zaszyfrowanych kolumn przy użyciu programu SQL Server Management Studio (SSMS).

Wymagania wstępne

Wymagania dotyczące programu PowerShell

Uwaga

Wymagania wstępne wymienione w tej sekcji mają zastosowanie tylko wtedy, gdy zdecydujesz się użyć programu PowerShell w niektórych krokach tego samouczka. Jeśli zamiast tego planujesz korzystać z witryny Azure Portal, możesz pominąć tę sekcję.

Moduł Az programu PowerShell w wersji 9.3.0 lub nowszej jest wymagany. Aby uzyskać szczegółowe informacje na temat sposobu instalowania modułu Az programu PowerShell, zobacz Instalowanie modułu Azure Az programu PowerShell. Aby określić wersję modułu Az programu PowerShell zainstalowanego na maszynie, uruchom następujące polecenie w programie PowerShell.

Get-InstalledModule -Name Az

Krok 1. Tworzenie i konfigurowanie serwera i bazy danych serii DC

W tym kroku utworzysz nowy serwer logiczny usługi Azure SQL Database i nową bazę danych przy użyciu sprzętu serii DC, który jest wymagany dla funkcji Always Encrypted z bezpiecznymi enklawami. Aby uzyskać więcej informacji, zobacz Seria DC.

  1. Przejdź do strony Wybierz wdrożenie SQL.

  2. Jeśli jeszcze nie zalogowano się do witryny Azure Portal, zaloguj się po wyświetleniu monitu.

  3. W obszarze Bazy danych SQL pozostaw wartość Typ zasobu ustawioną na Pojedyncza baza danych, a następnie wybierz pozycję Utwórz.

    Zrzut ekranu witryny Azure Portal przedstawiający opcję Dodaj do wdrożenia usługi Azure SQL.

  4. Na karcie Podstawy formularza Tworzenie bazy danych SQL Database w obszarze Szczegóły projektu wybierz odpowiednią subskrypcję platformy Azure.

  5. W obszarze Grupa zasobów wybierz pozycję Utwórz nową, wprowadź nazwę grupy zasobów i wybierz przycisk OK.

  6. W polu Nazwa bazy danych wprowadź wartość ContosoHR.

  7. W polu Serwer wybierz pozycję Utwórz nowy i wypełnij formularz Nowy serwer następującymi wartościami:

    • Nazwa serwera: wprowadź ciąg mysqlserver i dodaj kilka znaków w celu uzyskania unikatowości. Nie można podać dokładnej nazwy serwera do użycia, ponieważ nazwy serwerów muszą być globalnie unikatowe dla wszystkich serwerów na platformie Azure, a nie tylko w ramach subskrypcji. Wprowadź ciąg podobny do mysqlserver135, a portal informuje, czy jest dostępny, czy nie.
    • Lokalizacja: wybierz lokalizację z listy rozwijanej.

      Ważne

      Musisz wybrać lokalizację (region świadczenia usługi Azure), która obsługuje zarówno sprzęt z serii DC, jak i zaświadczenie platformy Microsoft Azure. Aby uzyskać listę regionów obsługujących serię DC, zobacz Dostępność serii DC. Oto regionalna dostępność zaświadczania microsoft Azure.

    • Metoda uwierzytelniania: wybierz pozycję Użyj uwierzytelniania SQL
    • Identyfikator logowania administratora serwera: wprowadź nazwę logowania administratora, na przykład azureuser.
    • Hasło: wprowadź hasło spełniające wymagania i wprowadź je ponownie w polu Potwierdź hasło .
    • Wybierz przycisk OK.
  8. Pozostaw opcję Chcesz użyć elastycznej puli SQL ustawionej na Nie.

  9. W obszarze Obliczenia i magazyn wybierz pozycję Konfiguruj bazę danych, a następnie wybierz pozycję Zmień konfigurację.

    Zrzut ekranu przedstawiający konfigurację sprzętu witryny Azure Portal i lokalizację konfigurowania bazy danych.

  10. Wybierz konfigurację sprzętu serii DC, a następnie wybierz przycisk OK.

    Zrzut ekranu witryny Azure Portal przedstawiający konfigurowanie bazy danych serii DC.

  11. Wybierz Zastosuj.

  12. Wróć do karty Podstawy , sprawdź, czy ustawienie Compute + storage jest ustawione na Ogólnego przeznaczenia, DC, 2 rdzenie wirtualne, 32 GB miejsca do magazynowania.

  13. W obszarze Nadmiarowość magazynu kopii zapasowych wybierz pozycję Magazyn kopii zapasowych lokalnie nadmiarowy.

  14. Wybierz pozycję Dalej: Sieć w dolnej części strony.

    Zrzut ekranu witryny Azure Portal przedstawiający konfigurowanie bazy danych serii DC — podstawy.

  15. Na karcie Sieć w polu Metoda łączności wybierz pozycję Publiczny punkt końcowy.

  16. W obszarze Reguły zapory ustaw wartość Dodaj bieżący adres IP klienta na Wartość Tak. Pozostaw opcję Zezwalaj usługom i zasobom platformy Azure na dostęp do tego serwera ustawionego na nie.

  17. W polu Zasady połączeń pozostaw wartość Domyślne zasady połączeń — używa zasad przekierowania dla wszystkich połączeń klienckich pochodzących z platformy Azure i serwera proxy dla wszystkich połączeń klientów pochodzących poza platformą Azure

  18. W przypadku połączeń szyfrowanych pozostaw minimalną wersję protokołu TLS do protokołu TLS 1.2.

  19. Wybierz pozycję Przejrzyj i utwórz w dolnej części strony.

    Zrzut ekranu przedstawiający kartę Tworzenie bazy danych SQL Database w witrynie Azure Portal.

  20. Na stronie Przeglądanie i tworzenie po przejrzeniu wybierz pozycję Utwórz.

Krok 2. Konfigurowanie dostawcy zaświadczania

W tym kroku utworzysz i skonfigurujesz dostawcę zaświadczania na platformie Microsoft Azure Attestation. Jest to konieczne, aby potwierdzić bezpieczną enklawę używaną przez bazę danych.

  1. Przejdź do strony Tworzenie dostawcy zaświadczania.

  2. Na stronie Tworzenie dostawcy zaświadczania podaj następujące dane wejściowe:

    • Subskrypcja: wybierz tę samą subskrypcję, w której utworzono serwer logiczny Usługi Azure SQL.
    • Grupa zasobów: wybierz tę samą grupę zasobów, w której utworzono serwer logiczny Azure SQL.
    • Nazwa: wprowadź nazwę myattestprovider i dodaj kilka znaków w celu uzyskania unikatowości. Nie można podać dokładnej nazwy dostawcy zaświadczania, ponieważ nazwy muszą być globalnie unikatowe. Wprowadź ciąg podobny do myattestprovider12345, a portal informuje, czy jest on dostępny, czy nie.
    • Lokalizacja: wybierz tę samą lokalizację co serwer logiczny usługi Azure SQL.
    • Plik certyfikatów podpisywania zasad: pozostaw to pole puste, ponieważ skonfigurujesz niepodpisane zasady.
  3. Po podaniu wymaganych danych wejściowych wybierz pozycję Przejrzyj i utwórz.

    Zrzut ekranu przedstawiający menu Tworzenie dostawcy zaświadczania w witrynie Azure Portal.

  4. Wybierz pozycję Utwórz.

  5. Po utworzeniu dostawcy zaświadczania wybierz pozycję Przejdź do zasobu.

  6. Na karcie Przegląd dostawcy zaświadczania skopiuj wartość właściwości Attest URI do schowka i zapisz ją w pliku. Jest to adres URL zaświadczania, który będzie potrzebny w kolejnych krokach.

    Zrzut ekranu przedstawiający adres URL zaświadczania w witrynie Azure Portal.

  7. Wybierz pozycję Zasady w menu zasobów po lewej stronie okna lub w dolnym okienku.

  8. Ustaw typ zaświadczania na SGX-IntelSDK.

  9. Wybierz pozycję Konfiguruj w górnym menu.

    Zrzut ekranu przedstawiający konfigurowanie zasad zaświadczania w witrynie Azure Portal.

  10. Ustaw wartość Format zasad na tekst. Pozostaw opcję Opcje zasad ustawione na Wprowadź zasady.

  11. W polu tekstowym Zasady zastąp domyślne zasady poniższymi zasadami. Aby uzyskać informacje o poniższych zasadach, zobacz Tworzenie i konfigurowanie dostawcy zaświadczania.

version= 1.0;
authorizationrules 
{
       [ type=="x-ms-sgx-is-debuggable", value==false ]
        && [ type=="x-ms-sgx-product-id", value==4639 ]
        && [ type=="x-ms-sgx-svn", value>= 2 ]
        && [ type=="x-ms-sgx-mrsigner", value=="e31c9e505f37a58de09335075fc8591254313eb20bb1a27e5443cc450b6e33e5"] 
    => permit();
};

  1. Wybierz pozycję Zapisz.

    Zrzut ekranu przedstawiający edytowanie zasad zaświadczania w witrynie Azure Portal.

  2. Wybierz pozycję Odśwież w górnym menu, aby wyświetlić skonfigurowane zasady.

Krok 3. Wypełnianie bazy danych

W tym kroku utworzysz tabelę i wypełnisz ją danymi, które później zaszyfrujesz i wykonasz zapytania.

  1. Otwórz program SSMS i połącz się z bazą danych ContosoHR na serwerze logicznym Azure SQL utworzonym bez włączenia funkcji Always Encrypted w połączeniu z bazą danych.

    1. W oknie dialogowym Łączenie z serwerem określ w pełni kwalifikowaną nazwę serwera (na przykład myserver135.database.windows.net), a następnie wprowadź nazwę użytkownika administratora i hasło określone podczas tworzenia serwera.

    2. Wybierz pozycję Opcje >> i wybierz kartę Właściwości połączenia. Upewnij się, master że wybrano bazę danych ContosoHR (a nie domyślną, bazę danych).

    3. Wybierz kartę Always Encrypted .

    4. Upewnij się, że pole wyboru Włącz funkcję Always Encrypted (szyfrowanie kolumny) nie jest zaznaczone.

      Zrzut ekranu przedstawiający nawiązywanie połączenia z serwerem przy użyciu programu SSMS bez włączonej funkcji Always Encrypted.

    5. Wybierz pozycję Połącz.

  2. Utwórz nową tabelę o nazwie Employees (Pracownicy).

    CREATE SCHEMA [HR];
    GO
    
    CREATE TABLE [HR].[Employees]
    (
        [EmployeeID] [int] IDENTITY(1,1) NOT NULL,
        [SSN] [char](11) NOT NULL,
        [FirstName] [nvarchar](50) NOT NULL,
        [LastName] [nvarchar](50) NOT NULL,
        [Salary] [money] NOT NULL
    ) ON [PRIMARY];
    GO
    
  3. Dodaj kilka rekordów pracowników do tabeli Employees .

    INSERT INTO [HR].[Employees]
            ([SSN]
            ,[FirstName]
            ,[LastName]
            ,[Salary])
        VALUES
            ('795-73-9838'
            , N'Catherine'
            , N'Abel'
            , $31692);
    
    INSERT INTO [HR].[Employees]
            ([SSN]
            ,[FirstName]
            ,[LastName]
            ,[Salary])
        VALUES
            ('990-00-6818'
            , N'Kim'
            , N'Abercrombie'
            , $55415);
    

Krok 4. Aprowizuj klucze z obsługą enklawy

W tym kroku utworzysz klucz główny kolumny i klucz szyfrowania kolumny, który zezwala na obliczenia enklawy.

  1. Korzystając z wystąpienia programu SSMS z poprzedniego kroku, w Eksplorator obiektów rozwiń bazę danych i przejdź do pozycji Klucze always encrypted zabezpieczeń>.

  2. Aprowizuj nowy klucz główny kolumny z obsługą enklawy:

    1. Kliknij prawym przyciskiem myszy pozycję Zawsze zaszyfrowane klucze i wybierz pozycję Nowy klucz główny kolumny....
    2. Wprowadź nazwę nowego klucza głównego kolumny: CMK1.
    3. Sprawdź, czy wybrano opcję Zezwalaj na obliczenia enklawy. (Domyślnie jest wybierana, jeśli dla bazy danych jest włączona bezpieczna enklawa. Powinna być włączona, ponieważ baza danych korzysta z konfiguracji sprzętowej serii DC.
    4. Wybierz usługę Azure Key Vault (zalecaną) lub Magazyn certyfikatów systemu Windows (bieżący użytkownik lub komputer lokalny).
      • Jeśli wybierzesz usługę Azure Key Vault, zaloguj się do platformy Azure, wybierz subskrypcję platformy Azure zawierającą magazyn kluczy, którego chcesz użyć, i wybierz magazyn kluczy. Wybierz pozycję Generuj klucz , aby utworzyć nowy klucz.
      • Jeśli wybierzesz pozycję Magazyn certyfikatów systemu Windows, wybierz przycisk Generuj certyfikat , aby utworzyć nowy certyfikat. Zrzut ekranu przedstawiający wybór obliczeń zezwalania na enklawy w programie SSMS podczas tworzenia nowego klucza głównego kolumny.
    5. Wybierz przycisk OK.
  3. Utwórz nowy klucz szyfrowania kolumn z obsługą enklawy:

    1. Kliknij prawym przyciskiem myszy pozycję Zawsze zaszyfrowane klucze i wybierz pozycję Nowy klucz szyfrowania kolumny.
    2. Wprowadź nazwę nowego klucza szyfrowania kolumny: CEK1.
    3. Z listy rozwijanej Klucz główny kolumny wybierz klucz główny kolumny utworzony w poprzednich krokach.
    4. Wybierz przycisk OK.

Krok 5. Szyfrowanie niektórych kolumn

W tym kroku zaszyfrujesz dane przechowywane w kolumnach SSN i Salary wewnątrz enklawy po stronie serwera, a następnie przetestujesz zapytanie SELECT na danych.

  1. Otwórz nowe wystąpienie programu SSMS i połącz się z bazą danych z włączoną funkcją Always Encrypted dla połączenia z bazą danych.

    1. Uruchom nowe wystąpienie programu SSMS.

    2. W oknie dialogowym Łączenie z serwerem określ w pełni kwalifikowaną nazwę serwera (na przykład myserver135.database.windows.net), a następnie wprowadź nazwę użytkownika administratora i hasło określone podczas tworzenia serwera.

    3. Wybierz pozycję Opcje >> i wybierz kartę Właściwości połączenia. Upewnij się, master że wybrano bazę danych ContosoHR (a nie domyślną, bazę danych).

    4. Wybierz kartę Always Encrypted .

    5. Zaznacz pole wyboru Włącz funkcję Always Encrypted (szyfrowanie kolumny).

    6. Wybierz pozycję Włącz bezpieczne enklawy. (Ten krok dotyczy programu SSMS 19 lub nowszego).

    7. Ustaw wartość Protokół na Zaświadczenie platformy Microsoft Azure. (Ten krok dotyczy programu SSMS 19 lub nowszego).

    8. Określ adres URL zaświadczania enklawy uzyskany przez wykonanie kroków opisanych w kroku 2: Konfigurowanie dostawcy zaświadczania. Zobacz poniższy zrzut ekranu.

      Zrzut ekranu przedstawiający kartę Always Encrypted programu SSMS Connect to Server z włączonym zaświadczeniem.

    9. Wybierz pozycję Połącz.

    10. Jeśli zostanie wyświetlony monit o włączenie parametryzacji dla zapytań Always Encrypted, wybierz pozycję Włącz.

  2. Korzystając z tego samego wystąpienia programu SSMS (z włączonym funkcją Always Encrypted), otwórz nowe okno zapytania i zaszyfruj kolumny SSN i Salary , uruchamiając poniższe instrukcje.

    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [SSN] [char] (11) COLLATE Latin1_General_BIN2
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
    WITH
    (ONLINE = ON);
    
    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [Salary] [money]
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
    WITH
    (ONLINE = ON);
    
    ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
    

    Uwaga

    Zwróć uwagę na instrukcję ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE w celu wyczyszczenia pamięci podręcznej planu zapytania dla bazy danych w powyższym skrycie. Po zmianie tabeli należy wyczyścić plany dla wszystkich partii i procedur składowanych, które uzyskują dostęp do tabeli w celu odświeżenia informacji o szyfrowaniu parametrów.

  3. Aby sprawdzić, czy kolumny SSN i Salary są teraz szyfrowane, otwórz nowe okno zapytania w wystąpieniu programu SSMS bez włączenia funkcji Always Encrypted dla połączenia z bazą danych i wykonaj poniższą instrukcję. Okno zapytania powinno zwracać zaszyfrowane wartości w kolumnach SSN i Salary . Jeśli wykonasz to samo zapytanie przy użyciu wystąpienia programu SSMS z włączoną funkcją Always Encrypted, powinny zostać wyświetlone dane odszyfrowane.

    SELECT * FROM [HR].[Employees];
    

Krok 6. Uruchamianie zaawansowanych zapytań względem zaszyfrowanych kolumn

Możesz uruchamiać zaawansowane zapytania względem zaszyfrowanych kolumn. Niektóre operacje przetwarzania zapytań będą wykonywane wewnątrz enklawy po stronie serwera.

  1. W wystąpieniu programu SSMS z włączoną funkcją Always Encrypted upewnij się, że włączono również parametryzacja funkcji Always Encrypted.

    1. Wybierz pozycję Narzędzia z menu głównego programu SSMS.
    2. Wybierz pozycję Opcje....
    3. Przejdź do pozycji Wykonywanie>zapytań SQL Server>Advanced.
    4. Upewnij się, że opcja Włącz parametryzacja dla funkcji Always Encrypted jest zaznaczona.
    5. Wybierz przycisk OK.
  2. Otwórz nowe okno zapytania, wklej poniższe zapytanie i wykonaj polecenie . Zapytanie powinno zwracać wartości zwykłego tekstu i wiersze spełniające określone kryteria wyszukiwania.

    DECLARE @SSNPattern [char](11) = '%6818';
    DECLARE @MinSalary [money] = $1000;
    SELECT * FROM [HR].[Employees]
    WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
    
  3. Spróbuj ponownie wykonać to samo zapytanie w wystąpieniu programu SSMS, które nie ma włączonej funkcji Always Encrypted. Powinien wystąpić błąd.

Następne kroki

Po ukończeniu tego samouczka możesz przejść do jednego z następujących samouczków:

Zobacz też