Kurz: Vytváření a používání indexů ve sloupcích povolených enklávou pomocí randomizovaného šifrování
platí pro: SQL Server 2019 (15.x) a novější – Pouze Windows
Azure SQL Database
V tomto kurzu se naučíte vytvářet a používat indexy ve sloupcích povolených enklávou pomocí randomizovaného šifrování podporovaného v Always Encrypted se zabezpečenými enklávami. Zobrazí se vám:
- Jak vytvořit index, když máte přístup ke klíčům (hlavní klíč sloupce a šifrovací klíč sloupce) chránící sloupec.
- Jak vytvořit index, pokud nemáte přístup ke klíčům chránícím sloupec.
Požadavky
Stáhněte si nejnovější verzi aplikace SQL Server Management Studio (SSMS).
Než budete postupovat podle následujících kroků v tomto kurzu, ujistěte se, že jste dokončili jeden z začínáte používat funkci Always Encrypted se zabezpečenými enklávami kurzů.
Krok 1: Povolení zrychleného obnovení databáze (ADR) ve vaší databázi
Poznámka
Tento krok platí jenom pro SQL Server. Pokud používáte Azure SQL Database nebo Azure SQL Managed Instance, přeskočte tento krok. Služba ADR je vždy povolená ve službě Azure SQL Database a ve službě Azure SQL Managed Instance.
Microsoft důrazně doporučuje povolit ADR v databázi před vytvořením prvního indexu na sloupci s aktivovanou enklávou pomocí randomizovaného šifrování. Viz část Obnovení databáze v Always Encrypted se zabezpečenými enklávami.
Zavřete všechny instance SSMS, které jste použili v předchozím kurzu. Zavření aplikace SSMS zavře připojení k databázím, které jste otevřeli, což je potřeba pro aktivaci ADR.
Otevřete novou instanci aplikace SSMS a připojte se k instanci SQL Serveru jako správce systému bez always Encrypted povolené pro připojení k databázi.
- Spusťte SSMS.
- V dialogovém okně Připojit k serveru zadejte název serveru, vyberte metodu ověřování a zadejte své přihlašovací údaje.
- Vyberte Možnosti >> a poté kartu Always Encrypted.
- Ujistěte se, že políčko Enable Always Encrypted (šifrování sloupce) není zaškrtnuté.
- Vyberte Připojit.
Otevřete nové okno dotazu a spuštěním následujícího příkazu povolte ADR.
ALTER DATABASE ContosoHR SET ACCELERATED_DATABASE_RECOVERY = ON;
Krok 2: Vytvoření a otestování indexu bez oddělení rolí
V tomto kroku vytvoříte a otestujete index šifrovaného sloupce. Budete jednat jako jeden uživatel, který zaujímá role správce databáze spravujícího databázi a vlastníka dat, který má přístup ke klíčům a chrání data.
Otevřete novou instanci SSMS a připojte se k instanci SQL Serveru s povoleným Always Encrypted pro připojení k databázi.
- Spusťte novou instanci aplikace SSMS.
- V dialogovém okně Připojit k serveru zadejte název serveru, vyberte metodu ověřování a zadejte své přihlašovací údaje.
- Vyberte Možnosti >> a vyberte kartu Always Encrypted.
- Zaškrtněte políčka povolit funkci Always Encrypted (šifrování sloupců) a povolit zabezpečené enklávy
- Pokud pro svou databázi používáte ověření identity, vyberte hodnotu protokolu Enklave Attestation Protocol, která představuje vaši službu ověření identity (služba Strážce hostitele nebo Ověření identity Microsoft Azure) a vyplňte adresu URL ověření identity enklávy. V opačném případě vyberte Žádné.
- Vyberte Připojit.
- Pokud se zobrazí výzva k povolení parametrizace pro dotazy Always Encrypted, vyberte Povolit.
Pokud jste nebyli vyzváni k povolení parametrizace pro funkci Always Encrypted, ověřte, že je povolená.
- V hlavní nabídce aplikace SSMS vyberte nástroje.
- Vyberte Možnosti....
- Přejděte na Provádění dotazů>SQL Serveru>Pokročilé.
- Ujistěte se, že je zaškrtnuté políčko Povolit parametrizaci pro funkci Always Encrypted.
- Vyberte OK.
Otevřete okno dotazu a spusťte následující příkazy, které zašifrují sloupec příjmení v tabulce Employees. V pozdějších krocích vytvoříte a použijete index pro tento sloupec.
ALTER TABLE [HR].[Employees] ALTER COLUMN [LastName] [nvarchar](50) 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
Vytvořte index ve sloupci LastName. Vzhledem k tomu, že jste připojeni k databázi s povolenou funkcí Always Encrypted, klientský ovladač uvnitř SSMS transparentně poskytuje CEK1 (šifrovací klíč sloupce chránící sloupec LastName) enklávě, která je potřeba k vytvoření indexu.
CREATE INDEX IX_LastName ON [HR].[Employees] ([LastName]) INCLUDE ([EmployeeID], [FirstName], [SSN], [Salary]); GO
Spusťte bohatý dotaz ve sloupci LastName a ověřte, že SQL Server při provádění dotazu používá index.
Ve stejném nebo novém okně dotazu se ujistěte, že je na panelu nástrojů zapnuté tlačítko Zahrnout statistiku živého dotazu.
Spusťte následující dotaz.
DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%'; SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix; GO
Na kartě Statistika živého dotazu sledujte, že dotaz používá index.
Krok 3: Vytvoření indexu s oddělením rolí
V tomto kroku vytvoříte index pro šifrovaný sloupec a předstíráte, že se jedná o dva různé uživatele. Jeden uživatel je DBA, který potřebuje vytvořit index, ale nemá přístup ke klíčům. Druhý uživatel je vlastníkem dat, který má přístup ke klíčům.
Pokud používáte instanci SSMS bez povolení funkce Always Encrypted, spusťte následující příkaz, který zahodí index ve sloupci LastName.
DROP INDEX IX_LastName ON [HR].[Employees]; GO
Jako vlastník dat (nebo aplikace, která má přístup ke klíčům), naplňte mezipaměť uvnitř enklávy pomocí CEK1.
Poznámka
Pokud jste po kroku 2 nerestartovali instanci SQL Serveru: Vytvoření a otestování indexu bez oddělení rolí, je tento krok redundantní, protože CEK1 už v mezipaměti existuje. Přidali jsme ho, abychom ukázali, jak může vlastník dat poskytnout klíč k enklávě, pokud ještě není v enklávě.
V instanci SSMS s povolenou funkcí Always Encrypted spusťte v okně dotazu následující příkazy. Příkaz odešle všechny šifrovací klíče sloupců s podporou enklávy do enklávy. Podrobnosti najdete v sp_enclave_send_keys.
EXEC sp_enclave_send_keys; GO
Alternativně k provedení výše uvedené uložené procedury můžete spustit dotaz DML, který používá enklávu pro sloupec LastName. Tím se enkláva naplní pouze CEK1.
DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%'; SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix; GO
Jako DBA vytvořte index.
V instanci SSMS bez povolení funkce Always Encrypted spusťte v okně dotazu následující příkazy.
CREATE INDEX IX_LastName ON [HR].[Employees] ([LastName]) INCLUDE ([EmployeeID], [FirstName], [SSN], [Salary]); GO
Jako vlastník dat spusťte bohatý dotaz na sloupec LastName a ověřte, že SQL Server při provádění dotazu používá index.
V instanci SSMS s povolenou funkcí Always Encrypted vyberte existující okno dotazu nebo otevřete nové okno dotazu a ujistěte se, že je na panelu nástrojů zapnuté tlačítko Zahrnout statistik u živého dotazu.
Spusťte následující dotaz.
DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%'; SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix; GO
V statistiky živého dotazusledujte, že dotaz používá index.
Další kroky
- kurz : Vývoj aplikace .NET pomocí funkce Always Encrypted se zabezpečenými enklávy
- kurz : Vývoj aplikace rozhraní .NET Framework pomocí funkce Always Encrypted se zabezpečenými enklávy