Sdílet prostřednictvím


Always Encrypted se zabezpečenou enklávou

platí pro: SQL Server 2019 (15.x) a novější – Pouze Windows Azure SQL Database

Funkce Always Encrypted se zabezpečenými enklávy rozšiřuje možnosti důvěrného výpočetního prostředí Always Encrypted povolením místního šifrování a bohatších důvěrných dotazů. Funkce Always Encrypted se zabezpečenými enklávy je dostupná v SQL Serveru 2019 (15.x) a novějším i ve službě Azure SQL Database.

Služba Azure SQL Database byla představena v roce 2015 a v SQL Serveru 2016 (13.x), funkce Always Encrypted chrání důvěrnost citlivých dat před malwarem a vysoce privilegovanými neautorizovanými uživateli: správci databází (DBA), správci počítačů, správci cloudu nebo kdokoli jiný, kdo má legitimní přístup k instancím serveru, hardwaru atd., ale neměl by mít přístup k některým nebo všem skutečným datům.

Bez vylepšení probíraných v tomto článku funkce Always Encrypted chrání data tím, že je zašifruje na straně klienta a nikdy povolení zobrazení dat nebo odpovídajících kryptografických klíčů v prostém textu v databázovém stroji. V důsledku toho je funkce šifrovaných sloupců v databázi výrazně omezená. Jedinými operacemi, které databázový stroj může provádět s šifrovanými daty, jsou porovnání rovnosti (k dispozici pouze s deterministickým šifrováním). Všechny ostatní operace, včetně kryptografických operací (počáteční šifrování dat nebo obměny klíčů) a rozsáhlejších dotazů (například porovnávání vzorů) nejsou v databázi podporované. Uživatelé potřebují přesunout data mimo databázi, aby mohli tyto operace provádět na straně klienta.

Funkce Always Encrypted se zabezpečenými enklávami řeší tato omezení tím, že umožňuje některé výpočty na plaintextových datech uvnitř zabezpečené enklávy na straně serveru. Zabezpečená enkláva je chráněná oblast paměti v rámci procesu databázového stroje. Zabezpečená enkláva se zobrazí jako neprůhledná krabice pro zbytek Databázového stroje a dalších procesů na hostitelském počítači. Neexistuje žádný způsob, jak zobrazit data nebo kód uvnitř enklávy z vnějšího prostředí, a to ani s ladicím programem. Díky těmto vlastnostem je zabezpečená enkláva důvěryhodné spouštěcí prostředí, které může bezpečně přistupovat k kryptografickým klíčům a citlivým datům v prostém textu, aniž by to ovlivnilo důvěrnost dat.

Funkce Always Encrypted používá zabezpečené enklávy, jak je znázorněno v následujícím diagramu:

diagram toku dat pro funkci Always Encrypted.

Při analýze příkazu Transact-SQL odeslaného aplikací databázový stroj určí, jestli příkaz obsahuje jakékoli operace s šifrovanými daty, které vyžadují použití zabezpečené enklávy. Pro taková prohlášení:

  • Klientský ovladač odešle šifrovací klíče sloupce potřebné pro operace do zabezpečené enklávy (přes zabezpečený kanál) a odešle příkaz ke spuštění.

  • Při zpracování příkazu databázový stroj deleguje kryptografické operace nebo výpočty na šifrované sloupce na zabezpečenou enklávu. V případě potřeby enkláva dešifruje data a provede výpočty v prostém textu.

Během zpracování příkazů nejsou v databázovém stroji mimo zabezpečenou enklávu vystavena šifrovací klíče dat i sloupců ve formátu prostého textu.

Podporované klientské ovladače

Pokud chcete používat funkci Always Encrypted se zabezpečenými enklávy, musí aplikace používat klientský ovladač, který tuto funkci podporuje. Nakonfigurujte aplikaci a klientský ovladač tak, aby povolily výpočty enklávy a ověření identity enklávy (viz část ověření identity zabezpečené enklávy níže). Podrobnosti, včetně seznamu podporovaných klientských ovladačů, naleznete v tématu Vývoj aplikací pomocí funkce Always Encrypted.

Podporované technologie enklávy

Funkce Always Encrypted podporuje následující technologie enklávy (nebo typy enklávy):

Typ enklávy, který je pro vaši databázi k dispozici, závisí na produktu SQL, který ho hostuje (Azure SQL Database vs. SQL Server) a konfiguraci databáze (v případě Azure SQL Database).

  • V SQL Serveru 2019 (15.x) a novější funkce Always Encrypted podporuje enklávy VBS. (Enklávy Intel SGX nejsou podporovány.)

  • Ve službě Azure SQL Database může databáze používat enklávu Intel SGX nebo enklávu VBS v závislosti na hardwaru, na který je databáze nakonfigurovaná tak, aby běžela:

    • Databáze využívající hardwarovou konfiguraci řady DC- (dostupné s nákupním modelem virtuálních jader ) používají enklávy Intel SGX.
    • Databáze používající konfiguraci jinou než DC-series s nákupním modelem virtuálních jader (vCore) a databáze s nákupním modelem DTU lze nakonfigurovat k použití enkláv VBS.

    Poznámka

    Enklávy VBS jsou aktuálně dostupné ve všech oblastech Azure SQL Database s výjimkou: Jio India – střed.

Důležité informace o ochraně na úrovni jednotlivých typů enklávy najdete v části Aspekty zabezpečení.

Ověření zabezpečené enklávy

Ověření identity enklávy je mechanismus hloubkové ochrany, který může pomoct zjistit útoky, které zahrnují manipulaci s kódem enklávy nebo jeho prostředí škodlivými správci.

Atestační proces enklávy umožňuje klientské aplikaci navázat důvěryhodný vztah se zabezpečenou enklávou databáze, ke které je aplikace připojená, ještě předtím, než aplikace použije enklávu ke zpracování citlivých dat. Ověřovací pracovní postup ověřuje, že enkláva je skutečně enklávou VBS nebo Intel SGX a že kód spuštěný uvnitř je skutečně knihovnou enklávy podepsanou Microsoftem pro Always Encrypted. Během ověření identity komunikuje klientský ovladač v aplikaci i databázový stroj s externí službou ověření identity pomocí koncového bodu zadaného klientem.

Funkce Always Encrypted může používat jednu ze dvou služeb ověření identity:

Pokud chcete pro vaši aplikaci povolit funkci Always Encrypted se zabezpečenými enklávy, musíte v konfiguraci klientského ovladače ve vaší aplikaci nastavit protokol ověření identity. Hodnota protokolu ověření identity určuje, jestli 1) klientská aplikace bude používat ověření identity, a pokud ano, 2) určuje typ služby ověření identity, kterou bude používat. Následující tabulka obsahuje podporované protokoly ověření identity pro platné kombinace typů produktů SQL a enkláv:

Hostitelský produkt Typ enklávy Podporované protokoly ověření identity
SQL Server 2019 (15.x) a novější Enklávy VBS HGS, Bez potvrzení
Azure SQL Database Enklávy SGX (databáze řady DC) Ověření pravosti Microsoft Azure
Azure SQL Database Enklávy VBS Bez ověření

Několik důležitých bodů, které je potřeba zdůraznit:

  • Ověřování enkláv VBS v SQL Serveru 2019 (15.x) a novější vyžaduje HGS. Enklávy VBS můžete použít i bez ověření identity (vyžadují se nejnovější klientské ovladače).
  • S enklávami Intel SGX (v databázích řady DC) ve službě Azure SQL Database je attestace povinná a vyžaduje Microsoft Azure Attestation.
  • Enklávy VBS ve službě Azure SQL Database nepodporují ověření identity.

Další informace najdete tady:

Terminologie

Klíče s podporou enklávy

Funkce Always Encrypted se zabezpečenými enklávami zavádí koncept klíčů s podporou enklávy:

  • hlavní klíč sloupce s podporou enklávy – klíč sloupce master, který má vlastnost ENCLAVE_COMPUTATIONS zadanou v objektu metadat klíče sloupce master uvnitř databáze. Sloupec master klíčový objekt metadat musí také obsahovat platný podpis vlastností metadat. Další informace najdete v tématu CREATE COLUMN MASTER KEY (Transact-SQL)
  • šifrovací klíč sloupce s podporou enklávy – šifrovací klíč sloupce, který je šifrovaný pomocí šifrovacího klíče sloupce s podporou enklávy master. Pro výpočty uvnitř zabezpečené enklávy je možné použít pouze šifrovací klíče sloupců s podporou enklávy.

Další informace najdete v tématu Správa klíčů pro Always Encrypted se zabezpečenou enklávou.

Sloupce s podporou enklávy

Sloupec s podporou enklávy je databázový sloupec zašifrovaný šifrovacím klíčem sloupce s podporou enklávy.

Důvěrné výpočetní funkce pro sloupce s podporou enklávy

Dvě klíčové výhody funkce Always Encrypted se zabezpečenými enklávy jsou místní šifrování a bohaté důvěrné dotazy.

Místní šifrování

Místní šifrování umožňuje kryptografické operace se sloupci databáze uvnitř zabezpečené enklávy bez přesunu dat mimo databázi. Místní šifrování zlepšuje výkon a spolehlivost kryptografických operací. Místní šifrování můžete provést pomocí příkazu ALTER TABLE (Transact-SQL).

Kryptografické operace podporované na místě jsou:

  • Šifrování sloupce ve formátu prostého textu pomocí šifrovacího klíče sloupce s podporou enklávy
  • Opětovné zašifrování šifrovaného sloupce s podporou enklávy na:
    • Otočte šifrovací klíč sloupce – znovu zašifrujte sloupec pomocí nového šifrovacího klíče sloupce s podporou enklávy.
    • Změňte typ šifrování sloupce s povolenou enklávou, například z deterministického na randomizovaný.
  • Dešifrování dat uložených ve sloupci s podporou enklávy (převod sloupce na textový sloupec)

Místní šifrování je povoleno s deterministickým i randomizovaným šifrováním, pokud jsou šifrovací klíče sloupců zahrnuté do kryptografické operace povoleny.

Důvěrné dotazy

Poznámka

SQL Server 2022 (16.x) přidává další podporu důvěrných dotazů s operacemi JOIN, GROUP BY a ORDER BY na šifrovaných sloupcích.

Důvěrné dotazy jsou dotazy DML, které zahrnují operace se sloupci s podporou enklávy prováděné uvnitř zabezpečené enklávy.

Operace podporované uvnitř zabezpečených enkláv jsou:

Operace Azure SQL Database SQL Server 2022 (16.x) SQL Server 2019 (15.x)
operátory porovnání Podporovaný Podporovaný Podporovaný
BETWEEN (Transact-SQL) Podporovaný Podporovaný Podporovaný
IN (Transact-SQL) Podporovaný Podporovaný Podporováno
PODOBNĚ (Transact-SQL) Podporovaný Podporováno Podporovaný
DISTINCT Podporovaný Podporovaný Podporovaný
se připojuje k Podporovaný Podporovaný Podporována jsou pouze spojení vnořených smyček
SELECT – klauzule ORDER BY (Transact-SQL) Podporovaný Podporovaný Nepodporováno
SELECT – GROUP BY– Transact-SQL Podporován Podporovaný Nepodporováno

Poznámka

Výše uvedené operace uvnitř zabezpečených enkláv vyžadují randomizované šifrování. Deterministické šifrování není podporováno. Porovnání rovnosti zůstává operací dostupnou pro sloupce používající deterministické šifrování.

Úroveň kompatibility databáze by měla být nastavená na SQL Server 2022 (160) nebo vyšší.

V Azure SQL Database a SQL Serveru 2022 (16.x) vyžadují důvěrné dotazy, které využívají enklávy na sloupci řetězce znaků (char, nchar), aby sloupec používal kolaci binárního kódu (_BIN2) nebo kolaci UTF-8. V SQL Serveru 2019 (15.x) se vyžaduje kolace a_BIN2.

Další informace naleznete v tématu Spustit příkazy Transact-SQL pomocí zabezpečených enkláv.

Indexy ve sloupcích s podporou enklávy

Pomocí randomizovaného šifrování můžete vytvářet neclusterované indexy pro sloupce s podporou enklávy, aby se důvěrné dotazy DML s využitím zabezpečené enklávy spouštěly rychleji.

Aby byl index na sloupci, který je zašifrovaný pomocí randomizovaného šifrování, bezpečný a nedocházelo k úniku citlivých dat, jsou hodnoty klíčů ve struktuře dat indexu (B-strom) zašifrovány a seřazeny podle jejich hodnot prostého textu. Řazení podle hodnoty prostého textu je také užitečné pro zpracování dotazů uvnitř enklávy. Když exekutor dotazu v databázovém stroji používá index pro šifrovaný sloupec pro výpočty uvnitř enklávy, prohledá index a vyhledá konkrétní hodnoty uložené ve sloupci. Každé hledání může zahrnovat více porovnání. Exekutor dotazu deleguje každé porovnání na enklávu, která dešifruje hodnotu uloženou ve sloupci a šifrovanou hodnotu klíče indexu, která má být porovnána, provede porovnání na dešifrovaném textu a vrátí výsledek porovnání exekutorovi.

Vytváření indexů ve sloupcích, které používají randomizované šifrování a nejsou povoleny pro enklávy, zůstává nepodporováno.

Index ve sloupci, se kterým se používá deterministické šifrování, je seřazen na základě šifrovaného textu (nikoli prostého textu), bez ohledu na to, zda je sloupec povolen.

Další informace najdete v tématu Vytvoření a použití indexů ve sloupcích pomocí funkce Always Encrypted se zabezpečenými enklávy. Obecné informace o tom, jak indexování v databázovém stroji funguje, najdete v článku clusterované a neclusterované indexy popsané.

Obnovení databáze

Pokud instance SQL Serveru selže, mohou být jeho databáze ponechány ve stavu, ve kterém datové soubory můžou obsahovat některé úpravy neúplných transakcí. Když je instance spuštěna, spustí proces s názvem obnovení databáze, který zahrnuje vrácení všech neúplných transakcí nalezených v transakčním protokolu, aby se zajistilo zachování integrity databáze. Pokud neúplná transakce udělala nějaké změny indexu, tyto změny musí být také vráceny zpět. Například některé hodnoty klíče v indexu můžou být potřeba odebrat nebo znovu vložit.

Důležitý

Microsoft důrazně doporučuje povolit zrychlené obnovení databáze (ADR) pro vaši databázi, před vytvořením prvního indexu v sloupci s povolenou enklávou a zašifrovaného náhodným šifrováním. Služba ADR je ve výchozím nastavení povolená ve službě Azure SQL Database a ve službě Azure SQL Managed Instance. Služba ADR je dostupná, ale ve výchozím nastavení není povolená v SQL Serveru 2019 (15.x) a novějším.

U tradičního procesu obnovení databáze (který se řídí modelem obnovení ARIES), aby mohl databázový stroj vrátit změnu indexu, musí počkat, až aplikace poskytne šifrovací klíč pro sloupec a enklávu, což může trvat dlouhou dobu. Zrychlené obnovení databáze (ADR) výrazně snižuje počet operací vrácení zpět, které je potřeba odložit, protože šifrovací klíč sloupce není v mezipaměti uvnitř enklávy dostupný. V důsledku toho podstatně zvyšuje dostupnost databáze minimalizací šance na zablokování nové transakce. Když je povolený ADR, může databázový stroj stále potřebovat šifrovací klíč sloupce k dokončení čištění starých verzí dat, ale dělá to jako úloha na pozadí, která nemá vliv na dostupnost databáze nebo uživatelských transakcí. V protokolu chyb se můžou zobrazit chybové zprávy, které značí neúspěšné operace čištění kvůli chybějícímu šifrovacímu klíči sloupce.

Důležité informace o zabezpečení

Následující aspekty zabezpečení platí pro funkci Always Encrypted se zabezpečenými enklávy.

  • Enklávy VBS pomáhají chránit vaše data před útoky uvnitř virtuálního počítače. Neposkytují ale žádnou ochranu před útoky pomocí privilegovaných systémových účtů pocházejících z hostitele. Enklávy Intel SGX chrání data před útoky pocházejícími z hostovaného operačního systému i hostitelského operačního systému.
  • Ověření identity enklávy se doporučuje, pokud je pro vaše prostředí dostupné a pokud máte obavy o ochranu dat před útoky uživatelů s přístupem správce na úrovni operačního systému k počítači, který je hostitelem vaší databáze. Pokud používáte ověření identity, musíte zajistit, aby služba ověření identity a její konfigurace byly spravovány důvěryhodným správcem. Podporované služby ověření identity také nabízejí různé zásady a režimy ověření identity, z nichž některé provádějí minimální ověření enklávy a jeho prostředí a jsou navržené pro testování a vývoj. Pečlivě dodržujte pokyny specifické pro vaši službu ověřování, abyste měli jistotu, že používáte doporučené konfigurace a zásady pro vaše produkční nasazení.
  • Šifrování sloupce pomocí náhodného šifrování a šifrovacího klíče sloupce s povolenou enklávou může způsobit odhalení pořadí dat uložených ve sloupci, protože takové sloupce podporují porovnání rozsahů. Pokud má například zašifrovaný sloupec obsahující mzdy zaměstnanců index, může škodlivá dba prohledávat index a najít maximální zašifrovanou mzdovou hodnotu a identifikovat osobu s maximální mzdou (za předpokladu, že jméno osoby není zašifrované).
  • Pokud používáte funkci Always Encrypted k ochraně citlivých dat před neoprávněným přístupem ze strany správců databáze, nesdílejte klíče sloupců master ani šifrovací klíče sloupců s těmito správci. DbA může spravovat indexy v šifrovaných sloupcích, aniž by měl přímý přístup ke klíčům pomocí mezipaměti šifrovacích klíčů sloupců uvnitř enklávy.

Důležité informace o provozní kontinuitě, zotavení po havárii a migraci dat

Při konfiguraci řešení vysoké dostupnosti nebo zotavení po havárii pro databázi pomocí funkce Always Encrypted se zabezpečenými enklávami se ujistěte, že všechny repliky databáze můžou používat zabezpečenou enklávu. Pokud je pro primární repliku k dispozici enkláva, ale pro sekundární repliku nikoli, všechny dotazy, které se pokusí použít funkci Always Encrypted se zabezpečenými enklávami, se po převzetí služeb nezdaří.

Při kopírování nebo migraci databáze pomocí funkce Always Encrypted se zabezpečenými enklávy se ujistěte, že cílové prostředí vždy podporuje enklávy. Jinak příkazy, které používají enklávy, nebudou fungovat na kopii nebo migrované databázi.

Tady jsou konkrétní aspekty, které byste měli vzít v úvahu:

  • SQL Serveru

    • Při konfiguraci skupiny dostupnosti AlwaysOnse ujistěte, že každá instance SQL Serveru hostující databázi ve skupině dostupnosti podporuje funkci Always Encrypted se zabezpečenými enklávami a nakonfigurovaným enklávem a ověřením identity.
    • Při obnovování ze záložního souboru databáze, která používá funkci Always Encrypted se zabezpečenými enklávami v instanci SQL Serveru, která nemá nakonfigurovanou enklávu, bude operace obnovení úspěšná a všechny funkce, které nespoléhá na enklávu, budou k dispozici. Následné příkazy využívající funkcionalitu enklávy však selžou a indexy ve sloupcích, které mají enklávu povolenou a používají randomizované šifrování, se stanou neplatnými. Totéž platí pro připojení databáze pomocí funkce Always Encrypted se zabezpečenými enklávami v instanci, která nemá nakonfigurovanou enklávu.
    • Pokud vaše databáze obsahuje indexy ve sloupcích povolených enklávou pomocí randomizovaného šifrování, před vytvořením zálohy databáze nezapomeňte povolit zrychlené obnovení databáze (ADR). ADR zajistí, aby databáze, včetně indexů, byla k dispozici okamžitě po obnovení databáze. Další informace naleznete v tématu Database Recovery.
  • Azure SQL Database

    • Při konfiguraci aktivní geografické replikacese ujistěte, že sekundární databáze podporuje zabezpečené enklávy, pokud to dělá primární databáze.

Při migraci databáze pomocí souboru bacpac v SQL Serveru i službě Azure SQL Database je nutné před vytvořením souboru bacpac odstranit všechny indexy pro sloupce s povoleným enklávem pomocí randomizovaného šifrování.

Známá omezení

Funkce Always Encrypted se zabezpečenými enklávami řeší určitá omezení funkce Always Encrypted tím, že podporuje přímé šifrování a pokročilejší důvěrné dotazy s indexy, jak je vysvětleno v Důvěrné výpočetní možnosti pro sloupce s podporou enklávy.

Všechna ostatní omezení funkce Always Encrypted uvedená v Omezení platí také pro funkci Always Encrypted se zabezpečenými enklávy.

Pro funkci Always Encrypted se zabezpečenými enklávy platí následující omezení:

  • Clusterované indexy nelze vytvořit ve sloupcích s podporou enklávy pomocí randomizovaného šifrování.
  • Sloupce s povolenou enklávou, které používají randomizované šifrování, nemohou být sloupci primárního klíče a nelze na ně odkazovat cizími klíčovými nebo jedinečnými klíčovými omezeními.
  • V SYSTÉMU SQL Server 2019 (15.x) (toto omezení neplatí pro Azure SQL Database nebo SQL Server 2022 (16.x)) jsou podporována pouze spojení pomocí vnořených smyček (použitím indexů, pokud jsou k dispozici) u sloupců s podporou enklávy pomocí randomizovaného šifrování. Informace o jiných rozdílech mezi různými produkty najdete v tématu Důvěrné dotazy.
  • Místní kryptografické operace se nedají kombinovat s žádnými dalšími změnami metadat sloupců, s výjimkou změny kolace na stejné znakové stránce a nulovosti. Nemůžete například šifrovat, znovu zašifrovat nebo dešifrovat sloupec A změnit datový typ sloupce v jednom příkazu ALTER TABLE/ALTER COLUMN Transact-SQL. Použijte dva samostatné příkazy.
  • Použití klíčů s podporou enklávy pro sloupce v tabulkách v paměti se nepodporuje.
  • Výrazy definující počítané sloupce nemohou provádět žádné výpočty ve sloupcích povolených pro enklávu s použitím randomizovaného šifrování (i když jsou výpočty mezi podporovanými operacemi uvedenými v důvěrné dotazy).
  • Escape znaky nejsou podporovány v parametrech operátoru LIKE ve sloupcích s povolenou enklávou při použití randomizovaného šifrování.
  • Dotazy s operátorem LIKE nebo relačním operátorem, který má parametr dotazu pomocí jednoho z následujících datových typů (které se po šifrování stanou velkými objekty), ignorují indexy a provádějí prohledávání tabulek.
    • nchar[n] a nvarchar[n], pokud n je větší než 3967.
    • char[n], varchar[n], binary[n], varbinary[n], pokud n je větší než 7935.
  • Omezení nástrojů:
    • Jedinými podporovanými úložišti klíčů pro ukládání klíčů sloupců s podporou enklávy master jsou Windows Certificate Store a Azure Key Vault.
    • Pokud chcete aktivovat místní kryptografickou operaci prostřednictvím ALTER TABLE/ALTER COLUMN, musíte příkaz vydat pomocí okna dotazu v nástroji SSMS nebo Azure Data Studio nebo můžete napsat vlastní program, který příkaz vydá. V současné době rutina Set-SqlColumnEncryption v modulu SqlServer PowerShell a průvodce Always Encrypted v sadě SQL Server Management Studio nepodporuje místní šifrování. Přesuňte data z databáze pro kryptografické operace, i když jsou šifrovací klíče sloupce používané pro operace aktivovány pro práci s enklávami.
  • Když obnovíte databázi s podporou enklávy VBS, je nezbytné znovu nakonfigurovat nastavení enklávy VBS.