Megosztás a következőn keresztül:


Adatoszlop titkosítása

Vonatkozik a következőkre:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalitikai Platform System (PDW)SQL adatbázis a Microsoft Fabric-ben

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL-felügyelt példányAzure Synapse Analytics

Ez a cikk azt ismerteti, hogyan titkosíthat egy adatoszlopot szimmetrikus titkosítással az SQL Serveren a Transact-SQL használatával. Ezt más néven oszlopszintű titkosításnak vagy cellaszintű titkosításnak is nevezik.

A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.

Biztonság

Permissions

Az alábbi lépések végrehajtásához a következő engedélyek szükségesek:

  • CONTROL engedélyt az adatbázisra.
  • CREATE CERTIFICATE engedélyt az adatbázisra. Csak Windows-bejelentkezések, SQL Server-bejelentkezések és alkalmazásszerepkörök birtokolhatnak tanúsítványokat. A csoportok és szerepkörök nem rendelkeznek tanúsítványokkal.
  • A ALTER jogosultság a táblán.
  • A kulcs bizonyos engedélyei nem lehettek megtagadva, beleértve a VIEW DEFINITION engedélyt is.

Adatbázis főkulcsának létrehozása

Az alábbi példák használatához adatbázis-főkulcsot kell használnia. Ha az adatbázis még nem rendelkezik adatbázis-főkulcsgal, hozzon létre egyet. Ha létre szeretne hozni egyet, csatlakozzon az adatbázishoz, és futtassa a következő szkriptet. Ügyeljen arra, hogy összetett jelszót használjon.

Másolja és illessze be a következő példát a AdventureWorks mintaadatbázishoz csatlakoztatott lekérdezési ablakba. Válassza a Végrehajtás lehetőséget.

CREATE MASTER KEY ENCRYPTION BY   
PASSWORD = '<complex password>';  

Mindig készítsen biztonsági másolatot az adatbázis főkulcsáról. További információ az adatbázis-főkulcsokról: CREATE MASTER KEY (Transact-SQL).

Példa: Titkosítás szimmetrikus titkosítással és hitelesítővel

  1. Az Object Explorer-ben csatlakozzon az adatbázismotor egy példányához.

  2. A Standard sávon válassza Új lekérdezéslehetőséget.

  3. Másolja és illessze be a következő példát a AdventureWorks mintaadatbázishoz csatlakoztatott lekérdezési ablakba. Válassza a Végrehajtás lehetőséget.

    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  
    

Titkosítás egyszerű szimmetrikus titkosítással

  1. Az Object Explorer-ben csatlakozzon az adatbázismotor egy példányához.

  2. A Standard sávon válassza Új lekérdezéslehetőséget.

  3. Másolja és illessze be a következő példát a AdventureWorks mintaadatbázishoz csatlakoztatott lekérdezési ablakba. Válassza a Végrehajtás lehetőséget.

     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  
    

Következő lépések