Sdílet prostřednictvím


Vytváření a používání indexů u sloupců pomocí funkce Always Encrypted se zabezpečenými enklávy

Platí pro: SQL Server 2019 (15.x) a novější verze ve službě Windows Azure SQL Database

Tento článek popisuje, jak vytvořit a používat indexy u sloupců šifrovaných pomocí klíčů pro šifrování sloupců s podporou enkláv ve funkci Always Encrypted se zabezpečenými enklávami.

Funkce Always Encrypted se zabezpečenými enklávy podporuje:

  • Clusterované a neskupené indexy ve sloupcích šifrovaných pomocí deterministického šifrování a klíčů s podporou enklávy
    • Tyto indexy jsou seřazené na základě šifertextu. Na tyto indexy se nevztahují žádné zvláštní aspekty. Můžete je spravovat a používat stejným způsobem jako indexy ve sloupcích zašifrovaných pomocí deterministického šifrování a klíčů, které nepodporují enklávy, stejně jako je tomu u technologie Always Encrypted.
  • Neclusterované indexy u sloupců šifrovaných pomocí randomizovaného šifrování a klíčů s podporou enklávy
    • Hodnoty klíčů v datové struktuře indexu (B-tree) se šifrují a seřadí na základě jejich hodnot ve formátu prostého textu. Další informace najdete v tématu Indexy sloupců s podporou enklávy.

Poznámka:

Zbývající část tohoto článku popisuje neclusterované indexy u sloupců šifrovaných pomocí náhodného šifrování a klíčů s podporou enklávy.

Vzhledem k tomu, že index ve sloupci pomocí randomizovaného šifrování a šifrovací klíč sloupce s podporou enklávy obsahuje šifrovaná data (šifrový text) seřazená podle prostého textu, musí modul SQL Serveru použít enklávu pro všechny operace, které zahrnují vytváření, aktualizaci nebo vyhledávání indexu, včetně:

  • Vytvoření nebo opětovné sestavení indexu
  • Vložení, aktualizace nebo odstranění řádku v tabulce (obsahující indexovaný nebo šifrovaný sloupec), který aktivuje vložení nebo odebrání indexového klíče do/z indexu.
  • Spouštění DBCC příkazů, které zahrnují kontrolu integrity indexů, například DBCC CHECKDB (Transact-SQL) nebo DBCC CHECKTABLE (Transact-SQL).
  • Obnovení databáze (například po selhání a restartování SQL Serveru), pokud SQL Server potřebuje vrátit zpět všechny změny indexu (další podrobnosti najdete níže).

Všechny výše uvedené operace vyžadují, aby enkláva měla šifrovací klíč pro indexovaný sloupec. Klíč je potřeba k dešifrování klíčů indexu. Enkláva může obecně získat šifrovací klíč sloupce jedním ze dvou způsobů:

  • Přímo z klientské aplikace.
  • Z mezipaměti šifrovacích klíčů sloupců.

Vyvolání operací indexování pomocí šifrovacích klíčů sloupců poskytovaných přímo klientem

Pro tuto metodu pro vyvolání operací indexování, aby fungovala, musí aplikace (včetně nástroje, jako je SQL Server Management Studio (SSMS) vydávající dotaz, který aktivuje operaci v indexu,:

  • Připojte se k databázi pomocí výpočtů Always Encrypted i enkláv povolených pro připojení k databázi.
  • Aplikace musí mít přístup k hlavnímu klíči sloupce, který chrání šifrovací klíč sloupce pro indexovaný sloupec.

Jakmile modul SQL Serveru parsuje dotaz aplikace a určí, že bude muset aktualizovat index v šifrovaném sloupci, aby spustil dotaz, dává klientskému ovladači pokyn, aby uvolnil požadovaný šifrovací klíč sloupce pro enklávu přes zabezpečený kanál. Jedná se o úplně stejný mechanismus, který slouží k poskytování enklávy šifrovacími klíči sloupců pro zpracování všech ostatních dotazů, které nepoužívají indexy. Například místní šifrování nebo dotazy využívající porovnávání vzorů a porovnání rozsahů.

Tato metoda je užitečná k zajištění, že přítomnost indexů na šifrovaných sloupcích je transparentní pro aplikace, které jsou již připojeny k databázi s Always Encrypted a výpočty v enklávě povoleny. Připojení aplikace může používat enklávu ke zpracování dotazů. Po vytvoření indexu ve sloupci ovladač v aplikaci transparentně poskytne šifrovací klíče sloupce enklávě pro účely indexování. Vytváření indexů může zvýšit počet dotazů, které vyžadují, aby aplikace odeslala šifrovací klíče sloupce do enklávy.

Pokud chcete tuto metodu použít, postupujte podle obecných pokynů pro spouštění příkazů pomocí zabezpečené enklávy v – Spuštění příkazů Transact-SQL pomocí zabezpečených enkláv.

Podrobné pokyny k použití této metody najdete v tématu Kurz: Vytváření a používání indexů ve sloupcích povolených enklávou pomocí randomizovaného šifrování.

Vyvolání operací indexování pomocí šifrovacích klíčů sloupců uložených v mezipaměti

Jakmile klientská aplikace odešle šifrovací klíč sloupce do enklávy ke zpracování libovolného dotazu, který vyžaduje výpočty enklávy, enkláva ukládá šifrovací klíč sloupce do interní mezipaměti. Tato mezipaměť se nachází uvnitř enklávy a je nepřístupná zvenčí.

Pokud stejná nebo jiná klientská aplikace používaná stejným uživatelem nebo jiný uživatel aktivuje operaci na indexu bez přímého poskytnutí požadovaného šifrování sloupce, enkláva vyhledá šifrovací klíč sloupce v mezipaměti. Operace indexu je proto úspěšná, i když klientská aplikace nezadá klíč.

Pro tuto metodu vyvolávání operací indexování, aby fungovala, se musí aplikace připojit k databázi bez funkce Always Encrypted povolené pro toto připojení a požadovaný šifrovací klíč sloupce musí být k dispozici v mezipaměti v rámci enklávy.

Tato metoda vyvolání operací se podporuje jenom u dotazů, které nevyžadují šifrovací klíče sloupců pro jiné operace, a nesouvisejí s indexy. Například aplikace, která vkládá řádek pomocí INSERT příkazu do tabulky, která obsahuje šifrovaný sloupec, se vyžaduje pro připojení k databázi s povolenou funkcí Always Encrypted v připojovacím řetězci a musí mít přístup ke klíčům bez ohledu na to, jestli má šifrovaný sloupec index nebo ne.

Tato metoda je užitečná pro:

  • Zajistěte, aby přítomnost indexů ve sloupcích povolených enklávou pomocí randomizovaného šifrování byla transparentní pro aplikace a uživatele, kteří nemají přístup ke klíčům a datům ve formátu prostého textu.

  • Zajišťuje, že vytvoření indexu v šifrovaném sloupci neobrzdí stávající dotazy. Pokud aplikace vydá dotaz na tabulku obsahující šifrované sloupce, aniž by měla přístup ke klíčům, může aplikace dál běžet, aniž by měla přístup ke klíčům po vytvoření indexu DBA. Představte si například aplikaci, která spustí následující dotaz na tabulku Employees , která obsahuje šifrované sloupce. DBA nevytvořil index pro žádný šifrovaný sloupec.

    DELETE FROM [dbo].[Employees] WHERE [EmployeeID] = 1;
    GO
    

    Pokud aplikace odešle dotaz přes připojení bez funkce Always Encrypted a povolených výpočtů v enklávě, dotaz bude úspěšný. Dotaz neaktivuje žádné výpočty u šifrovaných sloupců. Jakmile dbA vytvoří index pro všechny šifrované sloupce, dotaz aktivuje odebrání indexových klíčů z indexů. Enkláva v této situaci potřebuje šifrovací klíče sloupců. Aplikace bude moci tento dotaz dál spouštět přes stejné připojení, pokud vlastník dat dodá do enklávy klíče pro šifrování sloupců.

  • S cílem oddělit role při správě indexů umožňuje DBA vytvářet a měnit indexy u šifrovaných sloupců, aniž by měli přístup k citlivým datům.

Návod

sp_enclave_send_keys (Transact-SQL) umožňuje snadno odesílat všechny šifrovací klíče sloupců s podporou enklávy používané pro indexy do enklávy a naplnit mezipaměť klíčů.

Podrobné pokyny k použití této metody najdete v tématu Kurz: Vytváření a používání indexů ve sloupcích povolených enklávou pomocí randomizovaného šifrování.

Další kroky

Viz také