Självstudie: Komma igång med Always Encrypted med säkra enklaver i SQL Server

gäller för: SQL Server 2019 (15.x) och senare – endast Windows

I den här handledningen lär du dig hur du kommer igång med Always Encrypted med säkra enklaver i SQL Server. Den visar dig:

  • Så här skapar du en grundläggande miljö för testning och utvärdering av Always Encrypted med säkra enklaver utan attestering konfigurerad för enklaver.
  • Så här krypterar du data på plats och utfärdar omfattande konfidentiella frågor mot krypterade kolumner med hjälp av SQL Server Management Studio (SSMS).

Om du vill lära dig hur du konfigurerar Always Encrypted med säkra enklaver med hjälp av Host Guardian Service för enklavattestering kan du läsa Självstudie: Komma igång med Always Encrypted med säkra enklaver i SQL Server med attestering med hjälp av HGS

Förutsättningar

Den dator som är värd för din SQL Server-instans (kallas SQL Server-dator) måste uppfylla följande krav:

  • SQL Server 2019 (15.x) eller senare.
  • Windows 10 eller senare, Windows Server 2019 eller senare.
  • CPU-stöd för virtualiseringstekniker:
    • Intel VT-x med utökade sidtabeller.
    • AMD-V med snabb virtualiseringsindexering.
    • Om du kör SQL Server på en virtuell dator:
      • I Azure använder du en vm-storlek för generation 2 (rekommenderas) eller använder en vm-storlek av generation 1 med kapslad virtualisering aktiverad. Kontrollera dokumentationen om enskilda VM-storlekar för att avgöra vilka vm-storlekar i generation 1 som stöder kapslad virtualisering.
      • På Hyper-V 2016 eller senare (utanför Azure) kontrollerar du att den virtuella datorn är en virtuell dator av generation 2 (rekommenderas) eller att det är en virtuell dator av generation 1 med kapslad virtualisering aktiverad. Mer information finns i Ska jag skapa en virtuell dator av generation 1 eller 2 i Hyper-V? och Konfigurera kapslad virtualisering.
      • På VMware vSphere 6.7 eller senare aktiverar du stöd för virtualiseringsbaserad säkerhet för den virtuella datorn enligt beskrivningen i VMware-dokumentationen.
      • Andra hypervisor-program och offentliga moln kan ha stöd för kapslade virtualiseringsfunktioner som även aktiverar Always Encrypted med VBS-enklaver. I dokumentationen för virtualiseringslösningen finns kompatibilitets- och konfigurationsinstruktioner.
  • Den senaste versionen av SQL Server Management Studio (SSMS). Alternativt kan du installera SSMS på en annan dator.

Varning

I produktionsmiljöer kan körning av SSMS eller andra viktiga hanteringsverktyg på SQL Server-datorn minska säkerhetsfördelarna med att använda Always Encrypted. I allmänhet rekommenderas att du kör sådana verktyg på en annan dator. Mer information finns i Säkerhetsöverväganden för nyckelhantering.

Steg 1: Kontrollera att virtualiseringsbaserad säkerhet (VBS) är aktiverat

  1. Logga in på SQL Server-datorn som administratör, öppna en upphöjd Windows PowerShell-konsol och kör msinfo32.exe. Kontrollera om VBS körs. Om VBS körs hoppar du över de återstående stegen i det här avsnittet och går till nästa avsnitt.

    Skärmbild av den virtualiseringsbaserade säkerhetsinformationen för systeminformation.

  2. Aktivera VBS genom att köra följande cmdlet i PowerShell-sessionen.

    Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name EnableVirtualizationBasedSecurity -Value 1
    
  3. Om DIN SQL Server-dator är en virtuell dator, en fysisk dator som inte stöder säker UEFI-start eller en fysisk dator som inte är utrustad med en IOMMU, måste du ta bort VBS-kravet för plattformssäkerhetsfunktioner. Ta bort kravet på säker start och IOMMU genom att köra följande kommando på SQL Server-datorn i en upphöjd PowerShell-konsol:

    Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name RequirePlatformSecurityFeatures -Value 0
    
  4. Starta om SQL Server-datorn igen för att få VBS att komma online.

    Restart-Computer
    
  5. Upprepa steg 1 för att kontrollera om VBS körs.

Steg 2: Aktivera Always Encrypted med säkra enklaver i SQL Server

I det här steget aktiverar du funktionerna i Always Encrypted med enklaver i SQL Server-instansen.

  1. Använd SSMS och anslut till din SQL Server-instans som sysadmin utan att Always Encrypted är aktiverat för databasanslutningen.

    1. Starta SSMS.

    2. I dialogrutan Anslut till server anger du servernamnet, väljer en autentiseringsmetod och anger dina autentiseringsuppgifter.

    3. Välj Alternativ >> och välj fliken Alltid krypterad .

    4. Kontrollera att kryssrutan Aktivera Always Encrypted (kolumnkryptering) inte är markerad .

      Skärmbild av SSMS-anslutningsalternativet för Always Encrypted inaktiverat.

    5. Välj Anslut.

  2. Öppna ett nytt frågefönster och kör instruktionen nedan för att ange den säkra enklavens typ till virtualiseringsbaserad säkerhet (VBS).

    EXEC sys.sp_configure 'column encryption enclave type', 1;
    RECONFIGURE;
    
  3. Starta om SQL Server-instansen för att den tidigare ändringen ska börja gälla. Du kan starta om instansen i SSMS genom att högerklicka på den i Object Explorer och välja Starta om. När instansen har startats om återansluter du till den.

  4. Bekräfta att den säkra enklaven nu har laddats genom att köra följande fråga:

    SELECT [name], [value], [value_in_use] FROM sys.configurations
    WHERE [name] = 'column encryption enclave type';
    

    Frågan ska returnera följande resultat:

    name värde bruksvärde
    krypteringsenklavtyp för kolumn 1 1

Steg 3: Skapa en exempeldatabas

I det här steget skapar du en databas med exempeldata som du krypterar senare.

  1. Använd SSMS-instansen från föregående steg och kör instruktionen nedan i ett frågefönster för att skapa en ny databas med namnet ContosoHR.

    CREATE DATABASE [ContosoHR];
    
  2. Skapa en ny tabell med namnet Anställda.

    USE [ContosoHR];
    GO
    
    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];
    
  3. Lägg till några personalposter i tabellen Anställda.

    USE [ContosoHR];
    GO
    
    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);
    

Steg 4: Etablera enklaveraktiverade nycklar

I det här steget skapar du en kolumnhuvudnyckel och en kolumnkrypteringsnyckel som tillåter enklaverberäkningar.

  1. Med hjälp av SSMS-instansen från föregående steg i Object Explorerexpanderar du databasen och navigerar till Security>Always Encrypted Keys.

  2. Etablera en ny huvudnyckel för enklaveraktiverad kolumn:

    1. Högerklicka på Always Encrypted Keys och välj Ny kolumnhuvudnyckel....

    2. Välj kolumnhuvudnyckelnamnet: CMK1.

    3. Kontrollera att du väljer Antingen Windows Certificate Store (aktuell användare eller lokal dator) eller Azure Key Vault.

    4. Välj Tillåt enklaverberäkningar.

    5. Om du har valt Azure Key Vault loggar du in på Azure och väljer ditt nyckelvalv. Mer information om hur du skapar ett nyckelvalv för Always Encrypted finns i Hantera dina nyckelvalv från Azure-portalen.

    6. Välj certifikatet eller Azure Key Value-nyckeln om den redan finns eller välj knappen Generera certifikat för att skapa ett nytt.

    7. Välj OK.

      Skärmbild av valet Tillåt enklaverberäkningar i SSMS när du skapar en ny kolumnhuvudnyckel.

  3. Skapa en ny enklavaktiverad kolumnkrypteringsnyckel:

    1. Högerklicka på Always Encrypted Keys och välj ny kolumnkrypteringsnyckel.
    2. Ange ett namn för den nya kolumnkrypteringsnyckeln: CEK1.
    3. I listrutan Kolumnhuvudnyckel väljer du den kolumnhuvudnyckel som du skapade i föregående steg.
    4. Välj OK.

Steg 5: Kryptera vissa kolumner på plats

I det här steget krypterar du data som lagras i kolumnerna SSN och Salary i enklaven på serversidan och testar sedan en SELECT-fråga på data.

  1. Öppna en ny SSMS-instans och anslut till SQL Server-instansen med Always Encrypted aktiverat för databasanslutningen.

    1. Starta en ny instans av SSMS.

    2. I dialogrutan Anslut till server anger du servernamnet, väljer en autentiseringsmetod och anger dina autentiseringsuppgifter.

    3. Välj Alternativ >> och välj fliken Alltid krypterad .

    4. Markera kryssrutan Aktivera Always Encrypted (kolumnkryptering).

    5. Välj Aktivera säkra enklaver.

    6. Ange Protocol till Ingen.

      Skärmbild av fliken Anslut till servern Always Encrypted utan attestering med hjälp av SSMS.

    7. Välj Anslut.

    8. Om du uppmanas att aktivera parameterisering för Always Encrypted-frågor väljer du Aktivera.

  2. Med samma SSMS-instans (med Always Encrypted aktiverat) öppnar du ett nytt frågefönster och krypterar kolumnerna SSN och Salary genom att köra frågorna nedan.

    USE [ContosoHR];
    GO
    
    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;
    

    Anmärkning

    Observera instruktionen ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE för att rensa cacheminnet för frågeplanen för databasen i skriptet ovan. När du har ändrat tabellen måste du rensa planerna för alla batchar och lagrade procedurer som har åtkomst till tabellen för att uppdatera krypteringsinformation för parametrar.

  3. Om du vill kontrollera att kolumnerna SSN och Salary nu är krypterade öppnar du ett nytt frågefönster i SSMS-instansen utan Always Encrypted aktiverat för databasanslutningen och kör instruktionen nedan. Frågefönstret ska returnera krypterade värden i kolumnerna SSN och Salary . Om du kör samma fråga med SSMS-instansen med Always Encrypted aktiverat bör du se dekrypterade data.

    SELECT * FROM [HR].[Employees];
    

Steg 6: Kör omfattande frågor mot krypterade kolumner

Nu kan du köra omfattande frågor mot de krypterade kolumnerna. En del frågebearbetning utförs i din säkra miljö i serversidan.

  1. I SSMS-instansen med Always Encrypted aktiverat kontrollerar du att parameterisering för Always Encrypted också är aktiverad.

    1. Välj Verktyg på huvudmenyn i SSMS.
    2. Välj alternativ....
    3. Gå till Frågekörning>SQL Server>Avancerad.
    4. Kontrollera att Aktivera parameterisering för Always Encrypted är markerat.
    5. Välj OK.
  2. Öppna ett nytt frågefönster, klistra in och kör frågan nedan. Frågan ska returnera oformaterade värden och rader som uppfyller de angivna sökvillkoren.

    DECLARE @SSNPattern [char](11) = '%6818';
    DECLARE @MinSalary [money] = $1000;
    SELECT * FROM [HR].[Employees]
    WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
    
  3. Försök med samma fråga igen i SSMS-instansen som inte har Always Encrypted aktiverat och notera felet som inträffar.

Nästa steg

När du har slutfört den här självstudien kan du fortsätta med någon av följande självstudier:

Se även