Spouštění příkazů Transact-SQL pomocí zabezpečených enkláv
platí pro: SQL Server 2019 (15.x) a novější – Pouze Windows
Azure SQL Database
Funkce Always Encrypted se zabezpečenými enklávami umožňuje některým příkazům Transact-SQL (T-SQL) provádět důvěrné výpočty u šifrovaných databázových sloupců v zabezpečené enklávě na straně serveru.
Příkazy využívající zabezpečené enklávy
Následující typy příkazu T-SQL využívají zabezpečené enklávy.
Příkazy DDL využívající zabezpečené enklávy
Následující typy příkazů DDL (Data Definition Language) vyžadují zabezpečené enklávy.
- příkazy ALTER TABLE column_definition (Transact-SQL), které aktivují místní kryptografické operace pomocí klíčů s podporou enklávy. Další informace najdete v tématu Místní konfigurace šifrování sloupců pomocí funkce Always Encrypted se zabezpečenými enklávy.
- příkazy CREATE INDEX (Transact-SQL) a ALTER INDEX (Transact-SQL), které vytvářejí nebo mění indexy na sloupcích s podporou enklávy pomocí náhodného šifrování. Další informace najdete v tématu Vytvoření a použití indexů ve sloupcích pomocí funkce Always Encrypted se zabezpečenými enklávy.
Příkazy DML využívající zabezpečené enklávy
Následující jazyk DML (Data Manipulation Language) příkazy nebo dotazy na sloupce s povolenou enklávou pomocí randomizovaného šifrování vyžadují zabezpečené enklávy:
- Dotazy, které používají jeden nebo více následujících operátorů Transact-SQL podporovaných uvnitř zabezpečených enkláv:
- operátory porovnání
- BETWEEN (Transact-SQL)
- IN (Transact-SQL)
- LIKE (Transact-SQL)
- ODLIŠNÝ
- Spojení – SQL Server 2019 (15.x) podporuje pouze vnořené smyčkové spojení. SQL Server 2022 (16.x) a Azure SQL Database podporují vnořená smyčková spojení, hashová spojení a slučovací spojení.
- SELECT - ORDER BY – klauzule (Transact-SQL). Podporováno v SQL Serveru 2022 (16.x) a Azure SQL Database. Sql Server 2019 (15.x) se nepodporuje
- SELECT – klauzule GROUP BY (Transact-SQL). Podporováno v SQL Serveru 2022 (16.x) a Azure SQL Database. Sql Server 2019 (15.x) se nepodporuje
- Dotazy, které vkládají, aktualizují nebo odstraňují řádky, což následně aktivuje vkládání nebo odebírání indexového klíče do nebo z indexu ve sloupci s povolenou enklávou. Další informace najdete v tématu Vytvoření a použití indexů u sloupců pomocí funkce Always Encrypted se zabezpečenými enklávy
Poznámka
Operace s indexy a důvěrnými dotazy DML využívajícími enklávy jsou podporovány pouze u sloupců s podporou enklávy, které používají randomizované šifrování. Deterministické šifrování není podporováno.
Úroveň kompatibility databáze by měla být nastavená na SQL Server 2022 (160) nebo vyšší.
V Azure SQL Database a SQL Serveru 2022 (16.x) vyžadují důvěrné dotazy využívající enklávy ve sloupci řetězce znaků (char
, nchar
) , že sloupec používá kolaci binárního kódu (_BIN2) nebo kolaci UTF-8. V SQL Serveru 2019 (15.x) se vyžaduje kolace a_BIN2.
Příkazy DBCC využívající zabezpečené enklávy
DBCC (Transact-SQL) příkazy pro správu, které zahrnují kontrolu integrity indexů, mohou také vyžadovat zabezpečené enklávy, pokud databáze obsahuje indexy ve sloupcích povolených enklávou pomocí randomizovaného šifrování. Například DBCC CHECKDB (Transact-SQL) a DBCC CHECKTABLE (Transact-SQL).
Předpoklady pro spouštění příkazů pomocí zabezpečených enkláv
Vaše prostředí musí splňovat následující požadavky, aby podporovalo spouštění příkazů, které používají zabezpečenou enklávu.
Vaše instance SQL Serveru nebo váš databázový server ve službě Azure SQL Database musí být správně nakonfigurované tak, aby podporovaly enklávy a ověření identity, pokud je to možné/povinné. Další informace naleznete v tématu Nastavení zabezpečené enklávy a ověření identity.
Při připojování k databázi z aplikace nebo nástroje (například SQL Server Management Studio) nezapomeňte:
Použijte verzi klientského ovladače nebo verzi nástroje, která podporuje funkci Always Encrypted se zabezpečenými enklávy.
- Informace o klientských ovladač ích podporujících funkci Always Encrypted se zabezpečenými enklávy najdete v tématu Vývoj aplikací pomocí funkce Always Encrypted se zabezpečenými enklávy.
- Informace o nástrojích podporujících funkci Always Encrypted se zabezpečenými enklávy najdete v následujících částech.
Povolte funkci Always Encrypted pro připojení k databázi.
Zadejte protokol ověření identity, který určuje, jestli aplikace nebo nástroj musí enklávu před odesláním dotazů enklávy otestovat a kterou službu ověření identity má použít. Většina nástrojů a ovladačů podporuje následující protokoly ověření identity:
- Ověření identity Microsoft Azure – vynucuje ověření identity pomocí ověření identity Microsoft Azure.
- Služba Strážce hostitele – vynucuje ověření pomocí služby Strážce hostitele.
- Žádné – umožňuje používat enklávy bez ověření.
Následující tabulka určuje protokoly ověření identity platné pro konkrétní produkty SQL a technologie enklávy:
Výrobek Technologie enklávy Podporované protokoly ověření identity SQL Server 2019 (15.x) a novější Enklávy VBS Služba Strážce hostitele, Žádná Azure SQL Database Enklávy SGX (v databázích řady DC) Atestace Microsoft Azure Azure SQL Database Enklávy VBS Žádný
Zadejte adresu URL ověření identity, která je platná pro vaše prostředí, pokud používáte ověření identity.
- Pokud používáte SQL Server a službu Strážce hostitele (HGS), podívejte se na Určení a sdílení attestační URL služby HGS.
- Pokud používáte Azure SQL Database s enklávami Intel SGX a službou Microsoft Azure Attestation, přečtěte si téma Určení adresy URL pro zásady ověření.
Požadavky pro spouštění příkazů T-SQL s využitím enkláv v SSMS
Stáhněte si nejnovější verzi aplikace SQL Server Management Studio (SSMS).
Ujistěte se, že příkazy spouštíte z okna dotazu, které používá připojení s parametry Always Encrypted a atestačními parametry správně nakonfigurovanými.
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 přejděte na kartu Vlastnosti připojení. Zadejte název databáze.
Vyberte kartu Always Encrypted.
Vyberte Povolit funkci Always Encrypted (šifrování sloupce).
Vyberte Povolit zabezpečené enklávy.
Nastavte protokol na:
- Host Guardian Service, pokud používáte SQL Server.
- microsoft Azure Attestation, pokud používáte Azure SQL Database s enklávy Intel SGX.
- žádné pokud používáte Azure SQL Database s enklávami VBS.
Zadejte adresu URL atestace enklávy. Nelze použít, pokud je protokol nastaven na None. Například
https://hgs.bastion.local/Attestation
nebohttps://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave
.Vyberte Připojit.
Pokud se zobrazí výzva k povolení parametrizace pro dotazy Always Encrypted, vyberte Povolit.
Další informace naleznete v tématu Povolení a zakázání funkce Always Encrypted pro připojení k databázi.
Požadavky pro spouštění příkazů T-SQL s využitím enkláv v Nástroji Azure Data Studio
Doporučuje se minimální doporučená verze 1.23 nebo vyšší. Ujistěte se, že spouštíte příkazy z okna dotazu, které používá připojení, které má povolenou funkci Always Encrypted, a jak správný protokol ověření identity, tak nakonfigurovanou adresu URL ověření identity.
V dialogovém okně Připojení vyberte Upřesnit....
Chcete-li pro připojení povolit funkci Always Encrypted, nastavte pole Always Encrypted na Povoleno.
Pokud chcete povolit zabezpečené enklávy, nastavte pole Zabezpečené enklávy na Povoleno.
Zadejte protokol ověření identity a adresu URL ověření identity.
- Pokud používáte SQL Server, nastavte Attestation Protocol na službu Strážce hostitele a zadejte adresu URL ověřování služby Strážce hostitele do pole Adresa URL ověřování enklávy.
- Pokud používáte databázi řady DC se službou Intel SGX ve službě Azure SQL Database, nastavte protokol atestace na Azure Attestation a zadejte adresu URL atestace, která odkazuje na vaši zásadu ve službě Microsoft Azure Attestation v poli Adresa URL atestace enklávy.
- Pokud používáte databázi s enklávami VBS povolenou ve službě Azure SQL Database, nastavte protokol ověření identity na Žádné.
Výběrem OK zavřete rozšířené vlastnosti.
Další informace naleznete v tématu Povolení a zakázání funkce Always Encrypted pro připojení k databázi.
Pokud plánujete spouštět parametrizované dotazy DML, musíte také povolit Parametrizaci pro Always Encrypted.
Příklady
Tato část obsahuje příklady dotazů DML využívajících enklávy.
Příklady používají následující schéma.
CREATE SCHEMA [HR];
GO
CREATE TABLE [HR].[Jobs](
[JobID] [int] IDENTITY(1,1) PRIMARY KEY,
[JobTitle] [nvarchar](50) NOT NULL,
[MinSalary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
[MaxSalary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
);
GO
CREATE TABLE [HR].[Employees](
[EmployeeID] [int] IDENTITY(1,1) PRIMARY KEY,
[SSN] [char](11) ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
[FirstName] [nvarchar](50) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
[Salary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
[JobID] [int] NULL,
FOREIGN KEY (JobID) REFERENCES [HR].[Jobs] (JobID)
);
GO
Přesné hledání shody
Následující dotaz provede přesné hledání shody u šifrovaného sloupce řetězce SSN
.
DECLARE @SSN char(11) = '795-73-9838';
SELECT * FROM [HR].[Employees] WHERE [SSN] = @SSN;
GO
Vyhledávání podle vzorů
Následující dotaz provede vyhledávání vzorů odpovídajících zašifrovanému řetězci SSN
a vyhledá zaměstnance se zadanými posledními číslicemi čísla sociálního pojištění.
DECLARE @SSN char(11) = '795-73-9838';
SELECT * FROM [HR].[Employees] WHERE [SSN] = @SSN;
GO
Porovnání rozsahů
Následující dotaz provede porovnání rozsahu u šifrovaného sloupce Salary
a vyhledá zaměstnance s platy v zadaném rozsahu.
DECLARE @MinSalary money = 40000;
DECLARE @MaxSalary money = 45000;
SELECT * FROM [HR].[Employees] WHERE [Salary] > @MinSalary AND [Salary] < @MaxSalary;
GO
Připojuje
Následující dotaz provede spojení mezi tabulkami Employees
a Jobs
pomocí šifrovaného sloupce Salary
. Dotaz načte zaměstnance s platy mimo rozsah platů pro pracovní pozici zaměstnance.
SELECT * FROM [HR].[Employees] e
JOIN [HR].[Jobs] j
ON e.[JobID] = j.[JobID] AND e.[Salary] > j.[MaxSalary] OR e.[Salary] < j.[MinSalary];
GO
Řazení
Následující dotaz seřadí záznamy zaměstnanců podle šifrovaného Salary
sloupce a načítá 10 zaměstnanců s nejvyššími platy.
Poznámka
Řazení šifrovaných sloupců je podporováno v SQL Serveru 2022 (16.x) a Azure SQL Database, ale ne v SQL Serveru 2019 (15.x).
SELECT TOP(10) * FROM [HR].[Employees]
ORDER BY [Salary] DESC;
GO
Další kroky
Viz také
- Řešení běžných problémů s funkcí Always Encrypted se zabezpečenými enklávy
- Začínáme používat funkci Always Encrypted se zabezpečenými enklávy
- Místní konfigurace šifrování sloupců pomocí funkce Always Encrypted se zabezpečenými enklávy
- Vytvořit a použít indexy u sloupců pomocí funkce Always Encrypted se zabezpečenou enklávou