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. Umožňuje klientům šifrovat citlivá data v klientských aplikacích a zajistit tak, aby šifrovací klíče nikdy nebyli vystaveni databázovému stroji. To poskytuje oddělení mezi těmi, kteří data vlastní, 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í, například nemožnost provádět operace s šifrovanými daty, včetně řazení, filtrování (s výjimkou vyhledávání bodů pomocí deterministického šifrování) atd. To 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é. Na straně klienta ovladač s podporou always Encrypted šifruje citlivá data před jejich odesláním do databázového stroje a automaticky přepíše dotazy, aby se zachovala sémantika 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žívat operátory porovnání, řazení a index u šifrovaných sloupců byste měli implementovat 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íč sloupce slouží k šifrování dat v rámci šifrovaného sloupce. 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 ukládat 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í. Potom byste měli zřídit šifrovací klíče sloupců a každý z nich zašifrovat pomocí hlavního klíče 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. To může vyžadovat vytvoření nových tabulek se zašifrovanými sloupci nebo šifrováním existujících sloupců a dat. Při konfiguraci šifrování pro sloupec je potřeba zadat podrobnosti o šifrovacím algoritmu, šifrovacím klíči sloupce pro ochranu dat a typu š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í, spojení na základě rovnosti, 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, jako je Pravda/Nepravda nebo Severní/Jih/Východ/Západ.
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. Tím se zlepší 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ů, měli byste použít funkci Always Encrypted se zabezpečenými enklávy a použít 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 pro sloupce určené pro účely hledání nebo seskupení nezbytné použít deterministické šifrování. To umožňuje operace, jako jsou vyhledávání konkrétních hodnot, spojení na základě rovnosti, seskupování a indexování u šifrovaných sloupců.
Vzhledem k tomu, že databázový systém nemá žádný přístup k kryptografickým klíčům, šifrování sloupců vyžaduje přesun a šifrování dat mimo databázi. To znamená, že tento 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 Azure Data Studio nebo SQL Server Management Studio (SSMS), může klíče bezpečně sdílet 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.
Výše uvedené 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í 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).
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í:
Nejsou povoleny žádné výpočty sloupců šifrovaných pomocí randomizovaného šifrování. Deterministické šifrování podporuje následující operace zahrnující porovnání rovnosti – nejsou povoleny žádné jiné 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žívat operátory porovnání, řazení a index u šifrovaných sloupců byste měli implementovat funkci Always Encrypted se zabezpečenými enklávy.
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ů
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 char
Aplikace 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í, měly by se použít parametry dotazu. Nepodporuje se předávání literálů ani proměnných T-SQL, které odpovídají šifrovaným sloupcům. Další informace specifické pro klientský ovladač, který používáte, najdete v tématu Vývoj aplikací pomocí funkce Always Encrypted.
V Nástroji Azure Data Studio nebo SSMS je nezbytné použít parametrizaci proměnných Always Encrypted ke spouštění dotazů, které zpracovávají hodnoty přidružené k šifrovaným sloupcům. To 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 používající 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 .
- Sloupce řetězců (varchar, char atd.) s kolacemi jinými než kolacemi binárního kódu (_BIN2).
- 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 odkazované vypočítanými sloupci (pokud výraz nepodporuje operace pro 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 je sloupec v tabulce optimalizované pro paměť odkazován v nativně zkompilovaném modulu, nelze šifrování použít na žádný ze sloupců 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ě skupiny 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 | Popis |
---|---|
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 | 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 | Popis |
---|---|
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 najdete také ve sloupcích sys.columns .
Oprávnění k databázi
Pro funkci Always Encrypted existují čtyři oprávnění k databázi.
Zobrazení systémového katalogu a uložené procedury | Popis |
---|---|
UPRAVIT JAKÝKOLI HESLO SLUPCE HLAVNÍHO KLÍČE | Je vyžadováno vytvoření a odstranění metadat hlavního klíče sloupce. |
ZMĚNIT JAKÝKOLI KLÍČ ZAŠIFROVÁNÍ SLOUPCE | Je vyžadováno pro vytvoření a odstranění metadat sloupcového šifrovacího klíče. |
ZOBRAZENÍ DEFINICE HLAVNÍHO KLÍČE SLOUPCE | 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ů. |
ZOBRAZENÍ DEFINICE ŠIFROVACÍHO KLÍČE SLOUPCE | 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ář | 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 veřejné. 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 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. 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 (i když je nerozšifrujete), musí správce databáze explicitně udělit VIEW ANY COLUMN MASTER KEY DEFINITION a VIEW ANY COLUMN ENCRYPTION KEY DEFINITION oprávnění.