Sdílet prostřednictvím


Konfigurace místního šifrování sloupců pomocí Transact-SQL

Platí pro: SQL Server 2019 (15.x) a novější – pouze Windows Azure SQL Database

Tento článek popisuje, jak provádět kryptografické operace přímo na sloupcích pomocí technologie Always Encrypted se zabezpečenými enklávami pomocí příkazu ALTER TABLE/ALTER COLUMN. Základní informace o místním šifrování a obecných požadavcích najdete v tématu Konfigurace místního šifrování pomocí funkce Always Encrypted se zabezpečenými enklávy.

ALTER TABLE Pomocí příkazu nebo příkazu ALTER COLUMN můžete nastavit cílovou konfiguraci šifrování pro sloupec. Když příkaz spustíte, zabezpečená enkláva na straně serveru zašifruje, znovu zašifruje nebo dešifruje data uložená ve sloupci v závislosti na aktuální a cílové konfiguraci šifrování zadané v definici sloupce v příkazu.

  • Pokud sloupec není aktuálně šifrovaný, bude zašifrován, pokud zadáte ENCRYPTED WITH klauzuli v definici sloupce.
  • Pokud je sloupec aktuálně zašifrovaný, bude dešifrován (převeden na sloupec prostého textu), pokud klauzuli nezadáte ENCRYPTED WITH v definici sloupce.
  • Pokud je sloupec aktuálně šifrovaný, bude znovu zašifrován, pokud zadáte ENCRYPTED WITH klauzuli a zadaný typ šifrování sloupce nebo šifrovací klíč sloupce se liší od aktuálně používaného typu šifrování nebo šifrovacího klíče sloupce.

Poznámka:

Kryptografické operace nelze kombinovat s jinými změnami v jednom ALTER TABLE/ALTER COLUMN příkazu, s výjimkou změny sloupce na NULL nebo NOT NULLnebo změny kolace. Nemůžete například zašifrovat sloupec A změnit datový typ sloupce v jednom ALTER TABLE/ALTER COLUMN příkazu Transact-SQL. Použijte dva samostatné příkazy.

Jako každý dotaz, který používá zabezpečenou enklávu na straně serveru, musí být ALTER TABLE/ALTER COLUMN příkaz, který spouští šifrování na místě, odeslán přes připojení s povolenou funkcí Always Encrypted a výpočty enklávy.

Zbývající část tohoto článku popisuje, jak aktivovat místní šifrování pomocí ALTER TABLE/ALTER COLUMN příkazu z aplikace SQL Server Management Studio. Alternativně můžete zadat ALTER TABLE/ALTER COLUMN z Azure Data Studio nebo vašeho aplikace.

Poznámka:

V současné době rutina Invoke-Sqlcmd v modulu SqlServer PowerShell a sqlcmd nepodporuje použití ALTER TABLE/ALTER COLUMN pro místní kryptografické operace.

Místní šifrování pomocí Transact-SQL v SSMS

Pre-requisites

Postup

  1. Otevřete okno dotazu s povoleným Always Encrypted a výpočty v rámci enklávy v rámci připojení k databázi. Podrobnosti najdete v tématu Povolení a zakázání funkce Always Encrypted pro připojení k databázi.

  2. V okně dotazu zadejte ALTER TABLE/ALTER COLUMN konfiguraci cílového šifrování sloupce, který chcete zašifrovat, dešifrovat nebo znovu zašifrovat. Pokud sloupec šifrujete nebo znovu šifrujete, použijte klauzuli ENCRYPTED WITH . Pokud je váš sloupec řetězcovým sloupcem (například char, varchar, nchar, nvarchar), může být také nutné změnit jeho kolaci na BIN2.

    Poznámka:

    Pokud je hlavní klíč sloupce uložený ve službě Azure Key Vault, může se zobrazit výzva k přihlášení k Azure.

  3. Vymažte mezipaměť plánu pro všechny dávky a uložené procedury, které přistupují k tabulce, a aktualizujte informace o šifrování parametrů.

    ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
    

    Poznámka:

    Pokud plán ovlivněného dotazu z mezipaměti neodeberete, může první spuštění dotazu po šifrování selhat.

    K vymazání mezipaměti plánu používejte ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE nebo DBCC FREEPROCCACHE pečlivě, protože to může vést k dočasnému snížení výkonu dotazů. Pokud chcete minimalizovat negativní dopad vymazání mezipaměti, můžete vybrat a odstranit plány pouze pro dotčené dotazy.

  4. Voláním sp_refresh_parameter_encryption aktualizujte metadata pro parametry každého modulu (uložená procedura, funkce, zobrazení, trigger), které jsou trvalé v sys.parameters a mohly být zneplatněné šifrováním sloupců.

Examples

Šifrování sloupce na místě

Následující příklad předpokládá:

  • CEK1 je šifrovací klíč sloupce s podporou enklávy.
  • Sloupec SSN je prostý text a aktuálně používá výchozí kolaci databáze, například Latin1, ne BIN2 kolaci (například Latin1_General_CI_AI_KS_WS).

Příkaz šifruje SSN sloupec pomocí deterministického šifrování a šifrovacího klíče sloupce s povolením enklávy na místě. Přepíše také výchozí kolaci databáze odpovídající (na stejné kódové stránce) kolací BIN2.

Operace se provádí online (ONLINE = ON). Všimněte si také volání ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE, které znovu vytváří plány dotazů, které jsou ovlivněny změnou schématu tabulky.

ALTER TABLE [dbo].[Employees]
ALTER COLUMN [SSN] [char](11) COLLATE Latin1_General_BIN2
ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Deterministic, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
WITH
(ONLINE = ON);
GO
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
GO

Opětovným šifrováním místního sloupce za účelem změny typu šifrování

Následující příklad předpokládá:

  • Sloupec SSN je šifrován pomocí deterministického šifrování a šifrovacího klíče sloupce s podporou enklávy, CEK1.
  • Aktuální řazení, které je nastaveno na úrovni sloupce, je Latin1_General_BIN2.

Následující příkaz znovu zašifruje sloupec pomocí randomizovaného šifrování a stejného klíče (CEK1).

ALTER TABLE [dbo].[Employees]
ALTER COLUMN [SSN] [char](11) COLLATE Latin1_General_BIN2
ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1]
, ENCRYPTION_TYPE = Randomized
, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL;
GO
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
GO

Opětovným šifrováním sloupce na místě můžete otočit šifrovací klíč sloupce.

Následující příklad předpokládá:

  • Sloupec SSN je šifrovaný pomocí randomizovaného šifrování a šifrovacího klíče sloupce s podporou enklávy. CEK1
  • CEK2 je šifrovací klíč sloupce s podporou enklávy (liší se od CEK1).
  • Aktuální kolace nastavená na úrovni sloupce je Latin1_General_BIN2.

Následující příkaz znovu zašifruje sloupec pomocí CEK2.

ALTER TABLE [dbo].[Employees]
ALTER COLUMN [SSN] [char](11) COLLATE Latin1_General_BIN2
ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK2]
, ENCRYPTION_TYPE = Randomized
, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL;
GO
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
GO

Dešifruj sloupec na místě

Následující příklad předpokládá:

  • Sloupec SSN je šifrovaný pomocí klíče pro šifrování sloupce, který podporuje enklávy.
  • Aktuální kolace nastavená na úrovni sloupce je Latin1_General_BIN2.

Následující příkaz dešifruje sloupec a zachová kolaci beze změny. Případně můžete změnit kolaci. Například ve stejném příkazu změňte kolaci na jinou než BIN2.

ALTER TABLE [dbo].[Employees]
ALTER COLUMN [SSN] [char](11) COLLATE Latin1_General_BIN2
WITH (ONLINE = ON);
GO
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
GO

Další kroky

Viz také