Sdílet prostřednictvím


Always Encrypted – jak fungují dotazy na šifrované sloupce

platí pro: SQL Server Azure SQL DatabaseAzure SQL Managed Instance

Pokud chcete spustit dotaz na šifrované databázové sloupce, vložte data do těchto sloupců, načtěte hodnoty prostého textu nebo proveďte podporované operace (například vyhledávání bodů) pomocí deterministického šifrování, uživatel nebo aplikace vydávající dotaz musí splňovat následující požadavky:

  • Získejte přístup k hlavnímu klíči sloupce, který chrání data. Tento přístup ke klíči se vyžaduje kromě oprávnění na úrovni databáze, například SELECT v příslušné tabulce.
  • Připojte se k databázi s povolenou funkcí Always Encrypted v připojení k databázi. Většina nástrojů SQL a klientských ovladačů SQL podporuje povolení funkce Always Encrypted pro připojení k databázi.

Poznámka:

Pokud má uživatel požadovaná oprávnění databáze ke čtení dat, ale nemá přístup ke klíčům, které chrání, může uživatel stále načítat data cyphertext (šifrovaná) připojením k databázi bez povolení funkce Always Encrypted v připojení k databázi.

Snímek obrazovky schématu, jak fungují dotazy na šifrované sloupce

Tady je postup, jak fungují dotazy na šifrované sloupce:

  1. Když aplikace vydá parametrizovaný dotaz, ovladač klienta SQL v aplikaci transparentně kontaktuje databázový stroj (voláním sp_describe_parameter_encryption určit, které parametry cílí na šifrované sloupce a které by se měly šifrovat. Pro každý parametr, který je potřeba šifrovat, ovladač obdrží šifrovací algoritmus, typ šifrování a metadata klíče, včetně šifrovacího klíče šifrovaného sloupce a umístění odpovídajícího hlavního klíče sloupce.
  2. Ovladač volá úložiště klíčů obsahující hlavní klíče sloupců, aby dešifroval hodnoty šifrovacích klíčů šifrovaného sloupce. Výsledné šifrovací klíče sloupců ve formátu prostého textu se ukládají do mezipaměti, aby se snížil počet cest do úložiště klíčů při následných použití stejných šifrovacích klíčů sloupců.
  3. Ovladač používá získané šifrovací klíče sloupců prostého textu k zašifrování parametrů dotazu, které odpovídají šifrovaným sloupcům.
  4. Ovladač nahradí hodnoty prostého textu parametrů, které cílí na šifrované sloupce, zašifrované hodnoty a odešle dotaz do databázového stroje ke zpracování.
  5. Databázový stroj spustí dotaz, který může zahrnovat porovnání rovnosti sloupců pomocí deterministického šifrování.
  6. Pokud výsledky dotazu obsahují data ze šifrovaných sloupců, databázový stroj připojí pro každý sloupec metadata šifrování, včetně informací o šifrovacím algoritmu, typu šifrování a metadat klíče k sadě výsledků.
  7. Databázový stroj odešle sadu výsledků do klientské aplikace.
  8. Pro každý šifrovaný sloupec v přijaté sadě výsledků se ovladač nejprve pokusí najít šifrovací klíč sloupce prostého textu v místní mezipaměti a provede pouze zpáteční cestu do úložiště klíčů, které obsahuje hlavní klíč sloupce, pokud klíč v mezipaměti nenajde.
  9. Ovladač dešifruje výsledky a vrátí do aplikace hodnoty prostého textu.

Klientský ovladač komunikuje s úložištěm klíčů, který obsahuje hlavní klíč sloupce, pomocí zprostředkovatele hlavního úložiště klíčů sloupce, což je softwarová komponenta na straně klienta, která zapouzdřuje úložiště klíčů obsahující hlavní klíč sloupce. Poskytovatelé běžných typů úložišť klíčů jsou k dispozici v knihovnách ovladačů na straně klienta od Microsoftu nebo jako samostatné soubory ke stažení. Můžete také implementovat vlastního poskytovatele. Funkce Always Encrypted, včetně poskytovatelů integrovaného úložiště hlavních klíčů sloupců, se liší podle knihovny ovladače a její verze.

Seznam klientských ovladačů podporujících funkci Always Encrypted a informace o tom, jak vyvíjet aplikace, které dotazují šifrované sloupce, najdete v tématu Vývoj aplikací využívajících funkci Always Encrypted .

Šifrované sloupce můžete také dotazovat pomocí nástrojů SQL, například sloupce dotazů pomocí funkce Always Encrypted se sadou SQL Server Management Studio.