Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Funkce Always Encrypted a Always Encrypted se zabezpečenými enklávy jsou funkce navržené tak, aby chránily citlivé informace, včetně čísel platebních karet a národních nebo regionálních identifikačních čísel (například čísel sociálního pojištění USA), ve službě Azure SQL Database, Azure SQL Managed Instance a databázích SQL Serveru. Citlivá data můžete šifrovat v klientských aplikacích a zajistit tak, aby šifrovací klíče nikdy nebyli vystaveny databázovému stroji. Tento přístup poskytuje oddělení mezi těmi, kdo vlastní data, a těmi, kteří data spravují, ale neměli by mít přístup: místní správci databází, operátoři cloudové databáze nebo jiní uživatelé s vysokou úrovní oprávnění. Funkce Always Encrypted díky tomu umožňuje zákazníkům bezpečně ukládat citlivá data do cloudu, což snižuje riziko krádeže dat škodlivými zasvěcenci.
Funkce Always Encrypted má určitá omezení, jako je nemožnost provádět operace s šifrovanými daty, včetně řazení a filtrování (s výjimkou vyhledávání bodů pomocí deterministického šifrování). Toto omezení znamená, že některé dotazy a aplikace nemusí být kompatibilní s funkcí Always Encrypted nebo můžou vyžadovat významné změny logiky aplikace.
Aby bylo možné tato omezení vyřešit, funkce Always Encrypted se zabezpečenými enklávami umožňuje databázovému stroji zpracovávat šifrovaná data v chráněné oblasti paměti označované jako zabezpečená enkláva. Zabezpečené enklávy vylepšují možnosti důvěrného výpočetního prostředí funkce Always Encrypted tím, že podporují porovnávání vzorů, různé relační operátory a místní šifrování.
Funkce Always Encrypted zajišťuje, že šifrování je pro aplikace bezproblémové. Ovladač s podporou Always Encrypted v klientovi před odesláním do databázového stroje šifruje citlivá data a automaticky přepisuje dotazy, aby zachoval sémantiku aplikace. Také automaticky dešifruje výsledky dotazů ze šifrovaných databázových sloupců.
Konfigurace funkce Always Encrypted
Poznámka:
U aplikací, které potřebují provádět porovnávání vzorů, použijte operátory porovnání, řazení a indexování u šifrovaných sloupců, implementujte funkci Always Encrypted se zabezpečenými enklávy.
Tato část obsahuje přehled nastavení funkce Always Encrypted. Podrobnosti a návod k zahájení najdete v kurzu: Začínáme s funkcí Always Encrypted.
Pokud chcete ve své databázi nakonfigurovat funkci Always Encrypted, postupujte takto:
Zřiďte kryptografické klíče pro ochranu vašich dat. Funkce Always Encrypted používá dva typy klíčů:
- Šifrovací klíče sloupců.
- Hlavní klíče sloupce
Šifrovací klíč pro sloupec šifruje data v šifrovaném sloupci. Hlavní klíč sloupce je klíč, který chrání klíč, který šifruje jeden nebo více šifrovacích klíčů sloupců.
Ukládejte hlavní klíče sloupců do důvěryhodného úložiště klíčů mimo databázový systém, jako je Azure Key Vault, Úložiště certifikátů Windows nebo modul hardwarového zabezpečení. Po tomto kroku zřiďte šifrovací klíče sloupců a každý klíč zašifrujte hlavním klíčem sloupce.
Nakonec uložte metadata o klíčích v databázi. Metadata hlavního klíče sloupce obsahují 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 neukládá ani nepoužívá žádné klíče v prostém textu.
Další informace o správě klíčů Always Encrypted najdete v tématu Přehled správy klíčů pro funkci Always Encrypted.
Nastavte šifrování pro konkrétní databázové sloupce , které obsahují citlivé informace, aby se zajistila ochrana. Tento krok může vyžadovat vytvoření nových tabulek se zašifrovanými sloupci nebo šifrování existujících sloupců a dat. Při konfiguraci šifrování pro sloupec zadejte podrobnosti o šifrovacím algoritmu, šifrovací klíč sloupce pro ochranu dat 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. Pomocí deterministického šifrování můžete provádět vyhledávání bodů, spojení rovnosti, seskupování a indexování u šifrovaných sloupců. Neoprávnění uživatelé ale můžou 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ápadní oblast.
Náhodné šifrování používá metodu, která šifruje nepředvídatelná data. Každý identický vstup ve formátu prostého textu má za následek odlišný šifrovaný výstup. Tato metoda zlepšuje zabezpečení randomizovaného šifrování.
Pokud chcete provádět porovnávání vzorů pomocí operátorů porovnání, řazení a indexování u šifrovaných sloupců, použijte funkci Always Encrypted se zabezpečenými enklávy a použijte randomizované šifrování. Randomizované šifrování Always Encrypted (bez zabezpečených enkláv) nepodporuje vyhledávání, seskupování, indexování ani spojování u šifrovaných sloupců. Místo toho je nutné pro sloupce určené pro účely hledání nebo seskupení použít deterministické šifrování. Tento typ šifrování umožňuje operace, jako jsou bodová vyhledávání, rovnostní spojení, seskupování a indexování šifrovaných sloupců.
Vzhledem k tomu, že databázový systém podle návrhu nemá přístup k kryptografickým klíčům, šifrování sloupců vyžaduje přesun a šifrování dat mimo databázi. Proces šifrování může trvat dlouhou dobu a je zranitelný vůči přerušení sítě. Pokud později potřebujete sloupec znovu zašifrovat, například při obměně šifrovacího klíče nebo změně typů šifrování, dojde znovu ke stejným potížím. Použití funkce Always Encrypted se zabezpečenými enklávy eliminuje nutnost přesunu dat z databáze. Vzhledem k tomu, že enkláva je důvěryhodná, klientský ovladač v rámci vaší aplikace nebo nástroj, jako je SQL Server Management Studio (SSMS), může bezpečně sdílet klíče s enklávou během kryptografických operací. Enkláva pak může šifrovat nebo znovu šifrovat sloupce, což výrazně snižuje čas potřebný k těmto akcím.
Podrobnosti o kryptografických algoritmech Always Encrypted najdete v tématu Šifrování always Encrypted.
Předchozí kroky můžete provést pomocí nástrojů SQL:
- Zřízení klíčů Always Encrypted pomocí aplikace SQL Server Management Studio
- Konfigurace funkce Always Encrypted pomocí PowerShellu
- 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í nebo dešifrování dat. 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).
Po změně definice šifrovaného sloupce spusťte sp_refresh_parameter_encryption a aktualizujte metadata Always Encrypted pro objekt.
Omezení
Pro dotazy na šifrované sloupce platí následující omezení:
Výpočty ve sloupcích zašifrovaných randomizovaným šifrováním nemůžete provádět. Deterministické šifrování podporuje následující operace, které zahrnují porovnání rovnosti. Nejsou povoleny žádné další operace:
- = (Rovná se) (Transact-SQL) ve vyhledávání podle bodu.
- IN (Transact-SQL).
- SELECT - GROUP BY- Transact-SQL.
- DISTINCT.
Poznámka:
U aplikací, které potřebují provádět porovnávání vzorů, použijte operátory porovnání, řazení a indexování u šifrovaných sloupců, implementujte funkci Always Encrypted se zabezpečenými enklávy.
Nemůžete použít příkazy dotazu, které aktivují výpočty zahrnující prostý text i šifrovaná data. 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ého textu do šifrovaného sloupce (nebo naopak)
UPDATE,BULK INSERT, neboSELECT INTOINSERT..SELECT. - Vkládání literálů do šifrovaných sloupců
Taková prohlášení vedou k chybám způsobeným konfliktem operandů:
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 charAplikace potřebují použít parametry dotazu k zadání hodnot pro šifrované sloupce. Když například vkládáte data do šifrovaných sloupců nebo je filtrujete pomocí deterministického šifrování, použijte parametry dotazu. Předávání literálů nebo proměnných T-SQL, které odpovídají šifrovaným sloupcům, není podporováno. Další informace specifické pro klientský ovladač, který používáte, najdete v tématu Vývoj aplikací pomocí funkce Always Encrypted.
V SSMS je nezbytné použít parametrizaci pro proměnné Always Encrypted ke spouštění dotazů, které zpracovávají hodnoty přidružené k šifrovaným sloupcům. Tento požadavek zahrnuje scénáře, jako je vložení dat do šifrovaných sloupců nebo použití filtrů (v případech, kdy se používá deterministické šifrování).
Parametry s hodnotou tabulky , které cílí na šifrované sloupce, se nepodporují.
Dotazy, které používají následující klauzule, se nepodporují:
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, vector, alias, uživatelem definované typy.
- Sloupce FILESTREAM
- Sloupce s vlastností IDENTITY .
- Sloupce s vlastností ROWGUIDCOL .
- Řetězcové sloupce (varchar, char a další) s jiným seřazením než binárním kódovým bodem (
_BIN2). Sada znaků se nesmí lišit od výchozí sady znaků databáze. - 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 Full-Text vyhledávání).
- Zadejte počítané sloupce v tabulce.
- Sloupce, na které odkazují vypočítané sloupce, když výraz provádí nepodporované operace v rámci funkce Always Encrypted.
- Používejte řídké sloupce.
- 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
- Pokud se na sloupec v tabulce optimalizované pro paměť odkazuje na nativně zkompilovaný modul, šifrování se nedá použít u žádného sloupce v této tabulce.
- 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í.
- Sloupce v externích tabulkách (PolyBase) (poznámka: použití externích tabulek a tabulek s šifrovanými sloupci ve stejném dotazu je podporováno).
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ě skupin dostupnosti AlwaysOn.
- Distribuované dotazy (propojené servery, OPENROWSET (Transact-SQL), OPENDATASOURCE (Transact-SQL)).
- Dotazy napříč databázemi , které provádějí spojení se sloupci šifrovanými 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í
| Příkaz DDL | Description |
|---|---|
| CREATE COLUMN MASTER KEY | Vytvoří objekt metadat sloupcového hlavního klíče v databázi. |
| DROP COLUMN MASTER KEY | Odstraní hlavní klíč sloupce z databáze. |
| VYTVOŘENÍ ŠIFROVACÍHO KLÍČE SLOUPCE | Vytvoří objekt metadat šifrovacího klíče sloupce. |
| ZMĚNIT KLÍČ ŠIFROVÁNÍ SLOUPCE | Změní šifrovací klíč sloupce v databázi, přidá nebo odstraní zašifrovanou hodnotu. |
| DROP COLUMN ENCRYPTION KEY (odeberte klíč šifrování sloupce) | Odstraní klíč pro šifrování sloupce z databáze. |
| VYTVOŘIT TABULKU (ŠIFROVANÉ S) | Určuje šifrování sloupců. |
Zobrazení systémového katalogu a uložené procedury
| Zobrazení systémového katalogu a uložené procedury | Description |
|---|---|
| sys.column_encryption_keys | Vrátí informace o šifrovacích klíčích sloupců (CEKs). |
| sys.column_encryption_key_values | Vrátí informace o šifrovaných hodnotách šifrovacích klíčů sloupců (CEKs). |
| sys.column_master_keys | Vrátí řádek pro každý hlavní klíč databáze. |
| sp_refresh_parameter_encryption | Aktualizuje Always Encrypted metadata pro parametry zadané uložené procedury nevázané na schéma, uživatelem definovanou funkci, zobrazení, DML trigger, DDL trigger na úrovni databáze nebo DDL trigger na úrovni serveru. |
| sp_describe_parameter_encryption | Analyzuje zadaný příkaz Transact-SQL a jeho parametry a určí, které parametry odpovídají databázovým sloupcům chráněným pomocí funkce Always Encrypted. |
Informace o šifrovacích metadatech uložených pro každý sloupec naleznete v tématu sys.columns.
Oprávnění k databázi
Funkce Always Encrypted používá čtyři oprávnění k databázi.
| Zobrazení systémového katalogu a uložené procedury | Description |
|---|---|
ALTER ANY COLUMN MASTER KEY |
Je vyžadováno vytvoření a odstranění metadat hlavního klíče sloupce. |
ALTER ANY COLUMN ENCRYPTION KEY |
Je vyžadováno pro vytvoření a odstranění metadat sloupcového šifrovacího klíče. |
VIEW ANY COLUMN MASTER KEY DEFINITION |
Vyžaduje se pro přístup k metadatům hlavního klíče sloupce a jejich čtení, která jsou potřebná k dotazování šifrovaných sloupců. |
VIEW ANY COLUMN ENCRYPTION KEY DEFINITION |
Je vyžadován přístup k metadatům šifrovacího klíče sloupce a jejich čtení, což je nezbytné pro dotazování šifrovaných sloupců. |
Následující tabulka shrnuje oprávnění požadovaná pro běžné akce.
| Scénář | ALTER ANY COLUMN MASTER KEY |
ALTER ANY COLUMN ENCRYPTION KEY |
VIEW ANY COLUMN MASTER KEY DEFINITION |
VIEW ANY COLUMN ENCRYPTION KEY DEFINITION |
|---|---|---|---|---|
| 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
VIEW ANY COLUMN MASTER KEY DEFINITIONoprávnění aVIEW ANY COLUMN ENCRYPTION KEY DEFINITIONoprávnění. Tato oprávnění chrání sloupce i v případě, že uživatel nemá oprávnění k hlavním klíčům sloupců v úložištích klíčů a brání přístupu k prostému textu.Ve výchozím nastavení role pevné databáze public na SQL Serveru uděluje oprávnění
VIEW ANY COLUMN MASTER KEY DEFINITIONiVIEW ANY COLUMN ENCRYPTION KEY DEFINITION. Správce databáze se může rozhodnout odvolat nebo odepřít tato oprávnění 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 pevná role databáze veřejné ve výchozím nastavení neuděluje
VIEW ANY COLUMN MASTER KEY DEFINITIONaVIEW ANY COLUMN ENCRYPTION KEY DEFINITIONoprávnění. Tato změna umožňuje správné fungování určitých starších nástrojů, které používají starší verze DacFx. Pokud chcete pracovat se zašifrovanými sloupci (i když je nerozšifrovává), musí správce databáze explicitně udělit oprávněníVIEW ANY COLUMN MASTER KEY DEFINITIONaVIEW ANY COLUMN ENCRYPTION KEY DEFINITION.