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

  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íč 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.

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

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.

    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á:

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

Další krok