Šifrování sloupce dat
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
databáze SQL v Microsoft Fabric
platí pro:SQL Server
Azure SQL Database
azure SQL Managed Instance
azure Synapse Analytics
Tento článek popisuje, jak šifrovat sloupec dat pomocí symetrického šifrování na SQL Serveru pomocí jazyka Transact-SQL. To se někdy označuje jako šifrování na úrovni sloupce nebo šifrování na úrovni buňky.
Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2022
nebo AdventureWorksDW2022
, kterou si můžete stáhnout z domovské stránky ukázky a komunitní projekty Microsoft SQL Serveru.
Bezpečnost
Dovolení
Následující oprávnění jsou nezbytná k provedení následujících kroků:
-
CONTROL
oprávnění k databázi. -
CREATE CERTIFICATE
oprávnění k databázi. Certifikáty mohou vlastnit pouze přihlášení systému Windows, přihlášení k SQL Serveru a aplikační role. Skupiny a role nemohou vlastnit certifikáty. - oprávnění
ALTER
k tabulce. - Na klíči musí být určitá oprávnění a oprávnění
VIEW DEFINITION
nesmí být odepřeno.
Vytvoření hlavního klíče databáze
Pokud chcete použít následující příklady, musíte mít hlavní klíč databáze. Pokud vaše databáze ještě nemá hlavní klíč databáze, vytvořte ho. Pokud ho chcete vytvořit, připojte se k databázi a spusťte následující skript. Nezapomeňte použít složité heslo.
Zkopírujte a vložte následující příklad do okna dotazu, které je připojené k ukázkové databázi AdventureWorks
. Vyberte Spustit.
CREATE MASTER KEY ENCRYPTION BY
PASSWORD = '<complex password>';
Vždy zálohujte hlavní klíč databáze. Další informace o hlavních klíčích databáze naleznete v tématu CREATE MASTER KEY (Transact-SQL).
Příklad: Šifrování pomocí symetrického šifrování a ověřování
V Průzkumníku objektůse připojte k instanci Databázového stroje.
Na panelu Standard vyberte Nový dotaz.
Zkopírujte a vložte následující příklad do okna dotazu, které je připojené k ukázkové databázi
AdventureWorks
. Vyberte Spustit.CREATE CERTIFICATE Sales09 WITH SUBJECT = 'Customer Credit Card Numbers'; GO CREATE SYMMETRIC KEY CreditCards_Key11 WITH ALGORITHM = AES_256 ENCRYPTION BY CERTIFICATE Sales09; GO -- Create a column in which to store the encrypted data. ALTER TABLE Sales.CreditCard ADD CardNumber_Encrypted varbinary(160); GO -- Open the symmetric key with which to encrypt the data. OPEN SYMMETRIC KEY CreditCards_Key11 DECRYPTION BY CERTIFICATE Sales09; -- Encrypt the value in column CardNumber using the -- symmetric key CreditCards_Key11. -- Save the result in column CardNumber_Encrypted. UPDATE Sales.CreditCard SET CardNumber_Encrypted = EncryptByKey(Key_GUID('CreditCards_Key11') , CardNumber, 1, HASHBYTES('SHA2_256', CONVERT( varbinary , CreditCardID))); GO -- Verify the encryption. -- First, open the symmetric key with which to decrypt the data. OPEN SYMMETRIC KEY CreditCards_Key11 DECRYPTION BY CERTIFICATE Sales09; GO -- Now list the original card number, the encrypted card number, -- and the decrypted ciphertext. If the decryption worked, -- the original number will match the decrypted number. SELECT CardNumber, CardNumber_Encrypted AS 'Encrypted card number', CONVERT(nvarchar, DecryptByKey(CardNumber_Encrypted, 1 , HASHBYTES('SHA2_256', CONVERT(varbinary, CreditCardID)))) AS 'Decrypted card number' FROM Sales.CreditCard; GO
Šifrování pomocí jednoduchého symetrického šifrování
V Průzkumníku objektůse připojte k instanci databázového systému.
Na panelu Standard vyberte Nový dotaz.
Zkopírujte a vložte následující příklad do okna dotazu, které je připojené k ukázkové databázi
AdventureWorks
. Vyberte , Spustit.CREATE CERTIFICATE HumanResources037 WITH SUBJECT = 'Employee Social Security Numbers'; GO CREATE SYMMETRIC KEY SSN_Key_01 WITH ALGORITHM = AES_256 ENCRYPTION BY CERTIFICATE HumanResources037; GO USE [AdventureWorks2022]; GO -- Create a column in which to store the encrypted data. ALTER TABLE HumanResources.Employee ADD EncryptedNationalIDNumber varbinary(128); GO -- Open the symmetric key with which to encrypt the data. OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE HumanResources037; -- Encrypt the value in column NationalIDNumber with symmetric -- key SSN_Key_01. Save the result in column EncryptedNationalIDNumber. UPDATE HumanResources.Employee SET EncryptedNationalIDNumber = EncryptByKey(Key_GUID('SSN_Key_01'), NationalIDNumber); GO -- Verify the encryption. -- First, open the symmetric key with which to decrypt the data. OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE HumanResources037; GO -- Now list the original ID, the encrypted ID, and the -- decrypted ciphertext. If the decryption worked, the original -- and the decrypted ID will match. SELECT NationalIDNumber, EncryptedNationalIDNumber AS 'Encrypted ID Number', CONVERT(nvarchar, DecryptByKey(EncryptedNationalIDNumber)) AS 'Decrypted ID Number' FROM HumanResources.Employee; GO