Sdílet prostřednictvím


Trvale šifrováno

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

Diagram funkce Always Encrypted

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:

  1. 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.

  2. 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:

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:

    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, nebo SELECT 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 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í, 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á:

    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:

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 DEFINITION oprávnění a VIEW ANY COLUMN ENCRYPTION KEY DEFINITION oprá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 DEFINITION i VIEW 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 DEFINITION a VIEW ANY COLUMN ENCRYPTION KEY DEFINITION oprá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 DEFINITION a VIEW ANY COLUMN ENCRYPTION KEY DEFINITION.

Další krok