Aracılığıyla paylaş


Bir Veri Sütununu Şifrelemek

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnalytics Platform Sistemi (PDW)Microsoft Fabric'de SQL veritabanı

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse Analytics

Bu makalede Transact-SQL kullanarak SQL Server'da simetrik şifreleme kullanarak bir veri sütununun nasıl şifreleneceği açıklanmaktadır. Bu bazen sütun düzeyinde şifreleme veya hücre düzeyinde şifreleme olarak bilinir.

Bu makaledeki kod örnekleri, Microsoft SQL Server Örnekleri ve Topluluk Projeleri giriş sayfasından indirebileceğiniz AdventureWorks2022 veya AdventureWorksDW2022 örnek veritabanını kullanır.

Güvenlik

İzinler

Aşağıdaki adımları gerçekleştirmek için aşağıdaki izinler gereklidir:

  • CONTROL yetkisi veritabanında.
  • Veritabanında CREATE CERTIFICATE izni. Sertifikalara yalnızca Windows oturum açma bilgileri, SQL Server oturum açma bilgileri ve uygulama rolleri sahip olabilir. Gruplar ve roller sertifikaların sahibi olamaz.
  • tabloda ALTER yetkisi.
  • Anahtar üzerinde bazı izinler olması ve izin VIEW DEFINITION reddedilmemiş olması gerekir.

Veritabanı ana anahtarı oluşturma

Aşağıdaki örnekleri kullanmak için bir veritabanı ana anahtarınız olmalıdır. Veritabanınızda henüz bir veritabanı ana anahtarı yoksa bir tane oluşturun. Oluşturmak için veritabanınıza bağlanın ve aşağıdaki betiği çalıştırın. Karmaşık bir parola kullandığınızdan emin olun.

Aşağıdaki örneği kopyalayıp AdventureWorks örnek veritabanına bağlı sorgu penceresine yapıştırın. seçinçalıştırın.

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

Veritabanı ana anahtarınızı her zaman yedekleyin. Veritabanı ana anahtarları hakkında daha fazla bilgi için bkz. create MASTER KEY (Transact-SQL) .

Örnek: Simetrik şifreleme ve kimlik doğrulayıcı ile şifreleme

  1. Nesne Gezgini'ndeVeritabanı Motoru'nun bir örneğine bağlanın.

  2. Standart Çubuğu'nda Yeni Sorguseçin.

  3. Aşağıdaki örneği kopyalayıp AdventureWorks örnek veritabanına bağlı sorgu penceresine yapıştırın. seçin,yürütün.

    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  
    

Basit simetrik şifreleme ile şifreleme

  1. Nesne Gezgini, Veritabanı Motoru'nun bir örneğine bağlanın.

  2. Standart çubuğunda Yeni Sorguseçin.

  3. Aşağıdaki örneği kopyalayıp AdventureWorks örnek veritabanına bağlı sorgu penceresine yapıştırın. seçin,yürütün.

     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  
    

Sonraki adımlar