Sdílet prostřednictvím


Šifrování sloupce dat

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)databáze SQL v Microsoft Fabric

platí pro:SQL ServerAzure SQL Databaseazure SQL Managed Instanceazure 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í

  1. V Průzkumníku objektůse připojte k instanci Databázového stroje.

  2. Na panelu Standard vyberte Nový dotaz.

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

  1. V Průzkumníku objektůse připojte k instanci databázového systému.

  2. Na panelu Standard vyberte Nový dotaz.

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

Další kroky