Doporučení, kdy použít Službu Always Encrypted ve službě Azure SQL Database
Funkce Always Encrypted je funkce navržená k ochraně citlivých dat, jako jsou čísla platebních karet nebo národní/regionální identifikační čísla (například čísla sociálního zabezpečení USA), uložená ve službě Azure SQL Database, Azure SQL Managed Instance a databázích SQL Serveru. Funkce Always Encrypted umožňuje klientům šifrovat citlivá data v klientských aplikacích a nikdy odhalit šifrovací klíče databázovému stroji. Funkce Always Encrypted poskytuje oddělení mezi těmi, kdo data vlastní, a těmi, kteří data spravují, ale neměli by mít přístup – správci místních databází, operátoři cloudové databáze nebo jiní uživatelé s vysokou úrovní oprávnění. Díky tomu funkce Always Encrypted umožňuje zákazníkům s jistotou ukládat citlivá data do cloudu a snížit pravděpodobnost krádeže dat škodlivými interními pracovníky.
Funkce Always Encrypted je možné nakonfigurovat tak, aby podporovala omezené důvěrné dotazy na šifrovaná data, dotazy, které zahrnují porovnání rovnosti. Například vyhledávání podle klíče nebo spojení na základě rovnosti. Tyto dotazy používají deterministické šifrování.
Poznámka:
Zabezpečené enklávy rozšiřují možnosti důvěrného výpočetního prostředí funkce Always Encrypted pomocí porovnávání vzorů, dalších operátorů porovnání a místního šifrování.
Funkce Always Encrypted zajišťuje transparentní šifrování pro aplikace. Ovladač s povolenou funkcí Always Encrypted nainstalovaný na klientském počítači automaticky šifruje a dešifruje citlivá data v klientské aplikaci. Ovladač před předáním dat do databázového stroje zašifruje data v citlivých sloupcích. Ovladač pak automaticky přepíše dotazy tak, aby se zachovala sémantika aplikace. Podobně ovladač transparentně dešifruje data uložená v šifrovaných databázových sloupcích obsažených ve výsledcích dotazu.
Konfigurace funkce Always Encrypted
Pokud chcete ve své databázi nastavit funkci Always Encrypted, musíte:
Nasaďte kryptografické klíče pro ochranu dat. Funkce Always Encrypted používá dva typy klíčů:
- Šifrovací klíče sloupců.
- Hlavní klíče sloupce
Šifrovací klíč sloupce slouží k šifrování dat v šifrovaném sloupci. Hlavní klíč sloupce je klíč, který chrání klíč, který šifruje jeden nebo více šifrovacích klíčů sloupců. Hlavní klíče sloupců je potřeba uložit do důvěryhodného úložiště klíčů mimo databázový systém. Nejběžnějšími umístěními úložiště jsou Azure Key Vault, Úložiště certifikátů Windows nebo modul hardwarového zabezpečení. Pak potřebujete nasadit šifrovací klíče sloupců a každý z nich zašifrovat pomocí hlavního klíče sloupce. Nakonec musíte uložit metadata o klíčích v databázi.
- Metadata hlavního klíče sloupce zachycují umístění hlavního klíče sloupce.
- Metadata šifrovacího klíče sloupce obsahují šifrovanou hodnotu šifrovacího klíče sloupce. Databázový stroj nikdy neuchovává ani nepoužívá klíče žádného typu v prostém textu.
Nakonfigurujte šifrování pro vybrané databázové sloupce, které obsahují citlivá data, která mají být chráněna. Můžete vytvořit nové tabulky s šifrovanými sloupci nebo zašifrovat existující databázové sloupce a existující data. Při nastavování šifrování pro sloupec zadáte informace o šifrovacím algoritmu, šifrovací klíč sloupce pro ochranu dat ve sloupci a typ šifrování. Funkce Always Encrypted podporuje dva typy šifrování:
- Deterministické šifrování vždy generuje stejnou zašifrovanou hodnotu pro danou hodnotu prostého textu. Použití deterministického šifrování umožňuje přímé vyhledávání, rovnostní spojování, seskupování a indexování u šifrovaných sloupců. Může ale také umožnit neoprávněným uživatelům odhadnout informace o šifrovaných hodnotách prozkoumáním vzorů v šifrovaném sloupci, zejména pokud existuje malá sada možných šifrovaných hodnot, například Pravda/Nepravda nebo Severní/Jih/Východ/Západ.
- Náhodné šifrování používá metodu, která šifruje data méně předvídatelným způsobem. Náhodné šifrování je bezpečnější, ale zabraňuje vyhledávání, seskupování, indexování a spojování u šifrovaných sloupců.
Pro sloupce používané jako vyhledávací nebo seskupovací parametry použijte deterministické šifrování. Například číslo ID státní správy. Použijte randomizované šifrování pro data, jako jsou důvěrné komentáře šetření, které nejsou seskupené s jinými záznamy a nepoužívají se ke spojení tabulek. Podrobnosti o kryptografických algoritmech Always Encrypted najdete v tématu Šifrování always Encrypted. Výše uvedené kroky můžete provést pomocí nástrojů SQL:
- SQL Server Management Studio (SSMS)
- SQL Server PowerShell
- sqlpackage – který automatizuje proces nastavení
Aby se zajistilo, že klíče Always Encrypted a chráněná citlivá data se nikdy neprojeví v prostém textu v databázovém prostředí, databázový stroj se nemůže podílet na operacích zřizování klíčů a šifrování dat ani dešifrování. Proto Transact-SQL (T-SQL) nepodporuje operace zřizování klíčů ani kryptografických operací. Z stejného důvodu je potřeba šifrovat stávající data nebo je znovu zašifrovat (s jiným typem šifrování nebo šifrovacím klíčem sloupce) mimo databázi (nástroje SQL to můžou automatizovat).
Jak fungují dotazy na šifrované sloupce
Pokud uživatel potřebuje provést některou z těchto akcí, musí být splněna sada požadavků:
- Spuštění dotazu na šifrované sloupce databáze
- Vložení dat do šifrovaných sloupců
- Načtení hodnot prostého textu ze šifrovaných sloupců
- Provádění podporovaných operací (například vyhledávání bodů) u sloupců 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 sloupcovému klíči správce, který chrání data. Přístup ke klíči se vyžaduje kromě oprávnění na úrovni databáze, například
SELECTv tabulce obsahující data. - 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 není možný žádný přístup ke klíčům, které chrání akce. Uživatel může načíst šifrovaná data připojením k databázi bez povolení funkce Always Encrypted v připojení k databázi.
Tady je postup, jak fungují dotazy na šifrované sloupce:
- Když aplikace vydá parametrizovaný dotaz, ovladač klienta SQL v aplikaci transparentně kontaktuje databázový stroj (voláním sp_describe_parameter_encryption (Transact-SQL), aby určil, 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.
- Ovladač volá úložiště klíčů obsahující sloupcové hlavní klíče, aby dešifroval šifrované hodnoty šifrovacích klíčů sloupců. 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ů.
- Ovladač používá získané klíče pro šifrování sloupců prostého textu k šifrování parametrů dotazu, které odpovídají šifrovaným sloupcům.
- 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í.
- Databázový stroj spustí dotaz, který může zahrnovat porovnání rovnosti sloupců pomocí deterministického šifrování.
- 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ů.
- Databázový stroj odešle sadu výsledků do klientské aplikace.
- 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.
- 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ě integrovaných poskytovatelů úložiště hlavních klíčů sloupců, se liší podle knihovny ovladačů 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 dotazovat také pomocí nástrojů SQL, například Azure Data Studio nebo SSMS.
Omezení
Pro dotazy na šifrované sloupce platí následující omezení:
Deterministické šifrování podporuje následující operace zahrnující porovnání rovnosti – nejsou povoleny žádné jiné operace.
-
= (Rovná se) při bodovém vyhledávání.
- IN.
- SELECT - GROUP BY.
- DISTINCT.
-
= (Rovná se) při bodovém vyhledávání.
Nejsou povoleny žádné výpočty sloupců šifrovaných pomocí randomizovaného šifrování.
Poznámka:
Funkce Always Encrypted se zabezpečenými enklávy uvolní omezení tím, že povolí porovnávání vzorů, operátory porovnání, řazení a indexování sloupců pomocí randomizovaného šifrování.
Příkazy dotazů, které aktivují výpočty zahrnující prostý text i šifrovaná data, nejsou povolené. Například:
- Porovnání šifrovaného sloupce se sloupcem ve formátu prostého textu nebo literálem
- Kopírování dat ze sloupce prostý text do šifrovaného sloupce (nebo naopak) UPDATE, BULK INSERT, SELECT INTO nebo INSERT..SELECT.
- Vkládání literálů do šifrovaných sloupců
- Porovnání šifrovaného sloupce se sloupcem ve formátu prostého textu nebo literálem
Taková prohlášení vedou k chybám způsobeným konfliktem operandů:
Output
Msg 206, Level 16, State 2, Line 89
Operand type clash: char(11) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_1', column_encryption_key_database_name = 'ssn') collation_name = 'Latin1_General_BIN2' is incompatible with char
Aplikace musí použít parametry dotazu k předávání hodnot, které odpovídají šifrovaným sloupcům. Například při vkládání dat do šifrovaných sloupců nebo filtrování pomocí šifrovaných sloupců (při použití deterministického šifrování). Předávání literálů nebo proměnných T-SQL odpovídající šifrovaným sloupcům se nepodporuje. Další informace specifické pro klientský ovladač, který používáte, najdete v tématu Vývoj aplikací pomocí funkce Always Encrypted.
K vydávání dotazů, které předávají hodnoty odpovídající šifrovaným sloupcům v těchto nástrojích, je nutné použít parametrizaci pro proměnné Always Encrypted v nástroji Azure Data Studio nebo SSMS . Například při vkládání dat do šifrovaných sloupců nebo filtrování pomocí šifrovaných sloupců (při použití deterministického šifrování).
Parametry s hodnotou tabulky , které cílí na šifrované sloupce, se nepodporují.
Dotazy používající následující klauzule se nepodporují:
Po změně definice šifrovaného sloupce spusťte sp_refresh_parameter_encryption a aktualizujte metadata Always Encrypted pro objekt.
Funkce Always Encrypted není pro sloupce s následujícími vlastnostmi podporovaná:
- Sloupce používající jeden z následujících datových typů: xml, časové razítko, rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, alias, uživatelem definované typy.
- Sloupce FILESTREAM
- Sloupce s vlastností IDENTITY .
- Sloupce s vlastností ROWGUIDCOL .
- Sloupce řetězců (varchar, char atd.) s kolacemi jinými než kolacemi bodu kódu binárního (_BIN2) při použití deterministického šifrování.
- Podporují se sloupce, které jsou klíči pro clusterované a neclusterované indexy při použití randomizovaného šifrování (indexy u sloupců používajících deterministické šifrování).
- Sloupce zahrnuté v fulltextových indexech (Funkce Always Encrypted nepodporuje fulltextové vyhledávání).
- Počítané sloupce.
- Sloupce odkazované vypočítanými sloupci (pokud výraz nepodporuje operace pro Always Encrypted).
- Sada řídkých sloupců.
- Sloupce odkazované statistikou při použití randomizovaného šifrování (podporuje se deterministické šifrování).
- Dělení sloupců
- Sloupce s výchozími omezeními
- Sloupce odkazované jedinečnými omezeními při použití randomizovaného šifrování (podporuje se deterministické šifrování).
- Sloupce primárního klíče při použití randomizovaného šifrování (podporuje se deterministické šifrování).
- Odkazování na sloupce v omezeních cizího klíče při použití randomizovaného šifrování nebo při použití deterministického šifrování, pokud odkazované a odkazující sloupce používají různé klíče nebo algoritmy.
- Sloupce odkazované pomocí omezení kontroly
- Sloupce zachycené nebo sledované pomocí zachytávání dat změn
- Sloupce primárního klíče v tabulkách se sledováním změn
- Sloupce, které jsou maskované (pomocí dynamického maskování dat).
- Sloupce v roztažených databázových tabulkách (Pro funkci Stretch je možné povolit tabulky se sloupci zašifrovanými funkcí Always Encrypted.)
Důležité
Funkce Stretch Database je v SQL Serveru 2022 (16.x) a Azure SQL Database zastaralá. Tato funkce bude odebrána v budoucí verzi databázového stroje. Nepoužívejte tuto funkci v nové vývojové práci a naplánujte úpravu aplikací, které tuto funkci aktuálně používají.
U šifrovaných sloupců nefungují následující funkce:
- Replikace SQL Serveru (transakční, slučovací nebo snímková replikace) Podporují se funkce fyzické replikace, včetně funkce Always.
- Distribuované dotazy (propojené servery, OPENROWSET (Transact-SQL), OPENDATASOURCE (Transact-SQL)).
- Dotazy napříč databázemi , které provádějí spojení se sloupci (pomocí deterministického šifrování) z různých databází.
Referenční informace k Transact-SQL Always Encrypted
Funkce Always Encrypted používá následující příkazy Transact-SQL, zobrazení katalogu systému, systémové uložené procedury a oprávnění.
Prohlášení
- CREATE COLUMN MASTER KEY (Transact-SQL)
- DROP COLUMN MASTER KEY (Transact-SQL)
- VYTVOŘIT KLÍČ PRO ŠIFROVÁNÍ SLOUPCE (Transact-SQL)
- Změnit klíč šifrování sloupce (Transact-SQL)
- ŠIFROVACÍ KLÍČ SLOUPCE DROP (Transact-SQL)
- VYTVOŘIT TABULKU (ŠIFROVANÉ S)
Zobrazení systémového katalogu a uložené procedury
- sys.column_encryption_keys (Transact-SQL)
- sys.column_encryption_key_values (Transact-SQL)
- sys.column_master_keys (Transact-SQL)
- sp_refresh_parameter_encryption (Transact-SQL)
- sp_describe_parameter_encryption (Transact-SQL)
Informace o metadatech šifrování uložených pro každý sloupec najdete také v části sys.columns (Transact-SQL ).
Oprávnění k databázi
Pro funkci Always Encrypted existují čtyři oprávnění k databázi:
- ALTER ANY COLUMN MASTER KEY – vyžaduje se k vytvoření a odstranění metadat hlavního klíče sloupce.
- ZMĚNIT JAKÝKOLIV ŠIFROVACÍ KLÍČ SLOUPCE - požadováno k vytvoření a odstranění metadat šifrovacího klíče sloupce.
- ZOBRAZIT LIBOVOLNOU DEFINICI HLAVNÍHO KLÍČE SLOUPCE – vyžaduje se pro přístup k metadatům hlavního klíče sloupce a ke čtení metadat hlavního klíče sloupce, která je potřeba k dotazování šifrovaných sloupců.
- ZOBRAZIT DEFINICI ŠIFROVACÍHO KLÍČE JAKÉHOKOLIV SLOUPCE - nutné pro přístup a přečtení metadat hlavního klíče sloupce, které jsou potřeba k dotazování šifrovaných sloupců.
Následující tabulka shrnuje oprávnění požadovaná pro běžné akce.
| Scénář | ZMĚNIT JAKÝKOLI Hlavní Klíč Sloupce | ZMĚNIT JAKÝKOLI KLÍČ ŠIFROVÁNÍ SLOUPCE | ZOBRAZENÍ DEFINICE HLAVNÍHO KLÍČE SLOUPCE | ZOBRAZENÍ DEFINICE JAKÉHOKOLIV ŠIFROVACÍHO KLÍČE SLOUPCE |
|---|---|---|---|---|
| Správa klíčů (vytváření, změna nebo kontrola metadat klíčů v databázi) | X | X | X | X |
| Dotazování šifrovaných sloupců | X | X |
Důležité aspekty
- Při výběru šifrovaných sloupců jsou vyžadována oprávnění VIEW ANY COLUMN MASTER KEY DEFINITION a VIEW ANY COLUMN ENCRYPTION KEY DEFINITION, i když uživatel nemá oprávnění k hlavním klíčům sloupců (v úložištích klíčů), chrání sloupce a nemá přístup k pokusu o prostý text.
- V systému SQL Server jsou oprávnění VIEW ANY COLUMN MASTER KEY DEFINITION a VIEW ANY COLUMN ENCRYPTION KEY DEFINITION ve výchozím nastavení udělena pevné databázové roli public. Správce databáze se může rozhodnout odvolat (nebo odepřít) oprávnění k veřejné roli a udělit je konkrétním rolím nebo uživatelům, aby implementovali omezenější řízení.
- Ve službě SQL Database nejsou ve výchozím nastavení udělena oprávnění VIEW ANY COLUMN MASTER KEY DEFINITION a VIEW ANY COLUMN ENCRYPTION KEY DEFINITION pro veřejné pevné databázové roli. To umožňuje správné fungování určitých starších nástrojů (pomocí starších verzí DacFx). Pokud chcete pracovat se zašifrovanými sloupci (aniž by je dešifroval), musí správce databáze explicitně udělit oprávnění VIEW ANY COLUMN MASTER KEY DEFINITION a VIEW ANY COLUMN ENCRYPTION KEY DEFINITION.