Delen via


Zelfstudie: Indexen maken en gebruiken voor enclavekolommen met behulp van gerandomiseerde versleuteling

Van toepassing op: SQL Server 2019 (15.x) en hoger - Alleen Windows Azure SQL Database

In deze handleiding leert u hoe u indexen kunt maken en gebruiken op kolommen die geschikt zijn voor enclaves, met behulp van gerandomiseerde versleuteling die wordt ondersteund in Always Encrypted met beveiligde enclaves. U ziet het volgende:

  • Een index maken wanneer u toegang hebt tot de sleutels (de kolomhoofdsleutel en de sleutel voor kolomversleuteling) die de kolom beveiligen.
  • Een index maken wanneer u geen toegang hebt tot de sleutels die de kolom beveiligen.

Voorwaarden

Download de nieuwste versie van SSMS (SQL Server Management Studio).

Zorg ervoor dat u een van de zelfstudies Aan de slag met Always Encrypted met beveiligde enclaves hebt voltooid voordat u de onderstaande stappen in deze zelfstudie volgt.

Stap 1: Versneld databaseherstel (ADR) inschakelen in uw database

Notitie

Deze stap is alleen van toepassing op SQL Server. Als u Azure SQL Database of Azure SQL Managed Instance gebruikt, kunt u deze stap overslaan. ADR is altijd ingeschakeld in Azure SQL Database en Azure SQL Managed Instance.

Microsoft raadt u ten zeerste aan ADR in te schakelen in uw database voordat u de eerste index maakt op een enclavekolom met behulp van gerandomiseerde versleuteling. Zie de sectie Database Recovery in Always Encrypted met beveiligde enclaves.

  1. Sluit alle SSMS-exemplaren die u in de vorige handleiding hebt gebruikt. Als u SSMS sluit, worden databaseverbindingen gesloten die u hebt geopend. Dit is vereist om ADR in te schakelen.

  2. Open een nieuw exemplaar van SSMS en maak verbinding met uw SQL Server-exemplaar als sysadmin zonder Always Encrypted ingeschakeld voor de databaseverbinding.

    1. Start SSMS.
    2. Geef in het dialoogvenster Verbinding maken met server de servernaam op, selecteer een verificatiemethode en geef uw referenties op.
    3. Selecteer Opties >> en selecteer het tabblad Always Encrypted.
    4. Zorg ervoor dat het selectievakje Always Encrypted inschakelen (kolomversleuteling) is niet geselecteerd.
    5. Selecteer Maak verbinding.
  3. Open een nieuw queryvenster en voer de onderstaande instructie uit om ADR in te schakelen.

    ALTER DATABASE ContosoHR SET ACCELERATED_DATABASE_RECOVERY = ON;
    

Stap 2: Een index maken en testen zonder functiescheiding

In deze stap maakt en test u een index op een versleutelde kolom. U fungeert als een enkele gebruiker die de rollen vervult van zowel een DBA, die de database beheert, als van de eigenaar van de gegevens die verantwoordelijk is voor de sleutels en zodoende de gegevens beschermt.

  1. Open een nieuw SSMS-exemplaar en maak verbinding met uw SQL Server-exemplaar met Always Encrypted ingeschakeld voor de databaseverbinding.

    1. Start een nieuw exemplaar van SSMS.
    2. Geef in het dialoogvenster Verbinding maken met server de servernaam op, selecteer een verificatiemethode en geef uw referenties op.
    3. Selecteer Opties >> en selecteer het tabblad Always Encrypted.
    4. Schakel de selectievakjes in Always Encrypted inschakelen (kolomversleuteling) en Beveiligde enclaves inschakelen
    5. Als u attestation gebruikt voor uw database, selecteert u een waarde van Enclave Attestation Protocol die uw Attestation-service vertegenwoordigt (Host Guardian-service of Microsoft Azure Attestation) en vult u de enclave-attestation-URL in. Anders selecteert u Geen.
    6. Kies Maak verbinding.
    7. Als u wordt gevraagd om parameterisatie in te schakelen voor Always Encrypted-query's, selecteer inschakelen.
  2. Als u niet wordt gevraagd parameterisatie in te schakelen voor Always Encrypted, controleert u of deze is ingeschakeld.

    1. Kies Extra in het hoofdmenu van SSMS.
    2. Selecteer opties....
    3. Navigeer naar query-uitvoering>SQL Server>Advanced.
    4. Zorg ervoor dat Parameterisatie inschakelen voor Always Encrypted- is ingeschakeld.
    5. Selecteer OK-.
  3. Open een queryvenster en voer de onderstaande instructies uit om de kolom LastName in de tabel Employees te versleutelen. In latere stappen maakt en gebruikt u een index voor die kolom.

    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [LastName] [nvarchar](50) COLLATE Latin1_General_BIN2 
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL;
    GO   
    ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
    GO
    
  4. Maak een index in de kolom LastName. Omdat u bent verbonden met de database met Always Encrypted ingeschakeld, verstrekt het clientstuurprogramma in SSMS transparant CEK1- (de kolomversleutelingssleutel, die de LastName kolom beveiligt) aan de enclave, die nodig is om de index te maken.

    CREATE INDEX IX_LastName ON [HR].[Employees] ([LastName])
    INCLUDE ([EmployeeID], [FirstName], [SSN], [Salary]);
    GO
    
  5. Voer een uitgebreide query uit op de kolom LastName en controleer of SQL Server de index gebruikt bij het uitvoeren van de query.

    1. Zorg ervoor dat in hetzelfde of een nieuw queryvenster de knop Livequerystatistieken opnemen op de werkbalk is ingeschakeld.

    2. Voer de onderstaande query uit.

      DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%';
      SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix;
      GO
      
    3. Bekijk op het tabblad Live Query Statistics dat de query gebruikmaakt van de index.

Stap 3: Een index maken met functiescheiding

In deze stap maakt u een index voor een versleutelde kolom en doet u zich voor als twee verschillende gebruikers. Eén gebruiker is een DBA, die een index moet maken, maar geen toegang heeft tot de sleutels. De andere gebruiker is een gegevenseigenaar die toegang heeft tot de sleutels.

  1. Voer met behulp van de SSMS-instantie zonder Always Encrypted ingeschakeld de onderstaande instructie uit om de index in de kolom Achternaam te verwijderen.

    DROP INDEX IX_LastName ON [HR].[Employees]; 
    GO
    
  2. Als gegevenseigenaar (of een toepassing die toegang heeft tot de sleutels), vult u de cache in de enclave met CEK1.

    Notitie

    Tenzij u uw SQL Server-exemplaar opnieuw hebt opgestart na stap 2: een index maken en testen zonder functiescheiding, is deze stap overbodig omdat de CEK1- al aanwezig is in de cache. We hebben het toegevoegd om te laten zien hoe een gegevenseigenaar een sleutel kan leveren aan de enclave, als deze nog niet aanwezig is in de enclave.

    1. Voer in het SSMS-exemplaar met Always Encrypted ingeschakeld de onderstaande instructies uit in een queryvenster. Met de declaratie worden alle enclave-compatibele kolomversleutelingssleutels naar de enclave verzonden. Zie sp_enclave_send_keys voor meer informatie.

      EXEC sp_enclave_send_keys;
      GO
      
    2. Als alternatief voor het uitvoeren van de bovenstaande opgeslagen procedure kunt u een DML-query uitvoeren die gebruikmaakt van de enclave voor de kolom Achternaam. Hiermee wordt de enclave alleen gevuld met CEK1.

      DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%';
      SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix;
      GO
      
  3. Maak, als DBA, de index aan.

    1. Voer in het SSMS-exemplaar zonder Always Encrypted ingeschakeld de onderstaande instructies uit in een queryvenster.

      CREATE INDEX IX_LastName ON [HR].[Employees] ([LastName])
      INCLUDE ([EmployeeID], [FirstName], [SSN], [Salary]);
      GO
      
  4. Als gegevenseigenaar voert u een uitgebreide query uit op de kolom LastName en controleert u of SQL Server de index gebruikt bij het uitvoeren van de query.

    1. Selecteer in het SSMS-exemplaar met Always Encrypted ingeschakeld een bestaand queryvenster of open een nieuw queryvenster en controleer of de knop Livequerystatistieken opnemen op de werkbalk is ingeschakeld.

    2. Voer de onderstaande query uit.

      DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%';
      SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix;
      GO
      
    3. In de Live Query Statisticsziet u dat de query gebruikmaakt van de index.

Volgende stappen

Zie ook