Sdílet prostřednictvím


Vytvoření identických symetrických klíčů na dvou serverech

platí pro:SQL ServerAzure SQL Databaseazure SQL Managed Instance

Toto téma popisuje, jak vytvořit identické symetrické klíče na dvou různých serverech sql Serveru pomocí jazyka Transact-SQL. K dešifrování šifrovacího textu potřebujete klíč, který jste použili k zašifrování. Když v jedné databázi dojde k šifrování i dešifrování, klíč se uloží do databáze a je k dispozici v závislosti na oprávněních pro šifrování i dešifrování. Pokud ale šifrování a dešifrování probíhá v samostatných databázích nebo na samostatných serverech, klíč uložený v jedné databázi není k dispozici pro použití ve druhé databázi.

Než začnete

Omezení a restrikce

  • Při vytvoření symetrického klíče musí být symetrický klíč zašifrován alespoň jedním z následujících způsobů: certifikát, heslo, symetrický klíč, asymetrický klíč nebo POSKYTOVATEL. Klíč může mít více než jedno šifrování každého typu. Jinými slovy, jeden symetrický klíč je možné zašifrovat pomocí více certifikátů, hesel, symetrických klíčů a asymetrických klíčů současně.

  • Pokud je symetrický klíč zašifrovaný heslem místo veřejného klíče hlavního klíče databáze, použije se šifrovací algoritmus TRIPLE DES. Z tohoto důvodu jsou klíče vytvořené pomocí silného šifrovacího algoritmu, jako je AES, samy o sobě zabezpečeny slabším algoritmem.

Bezpečnost

Dovolení

Vyžaduje oprávnění ALTER ANY SYMMETRIC KEY pro databázi. Pokud je zadána autorizace, vyžaduje oprávnění IMPERSONATE pro uživatele databáze nebo oprávnění "ALTER" k roli aplikace. Pokud je šifrování certifikátem nebo asymetrickým klíčem, vyžaduje oprávnění VIEW DEFINITION k certifikátu nebo asymetrickému klíči. Jen přihlášení systému Windows, přihlášení k SQL Serveru a aplikační role mohou být vlastníky symetrických klíčů. Skupiny a role nemohou vlastnit symetrické klíče.

Použití Transact-SQL

Vytvoření identických symetrických klíčů na dvou různých serverech

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

  2. Na panelu Standard klikněte na Nový dotaz.

  3. Vytvořte klíč spuštěním následujících příkazů CREATE MASTER KEY, CREATE CERTIFICATE a CREATE SYMMETRIC KEY. Nahraďte <password> platným heslem.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';  
    GO  
    CREATE CERTIFICATE [cert_keyProtection] WITH SUBJECT = 'Key Protection';  
    GO  
    CREATE SYMMETRIC KEY [key_DataShare] WITH  
        KEY_SOURCE = 'My key generation bits. This is a shared secret!',  
        ALGORITHM = AES_256,   
        IDENTITY_VALUE = 'Key Identity generation bits. Also a shared secret'  
        ENCRYPTION BY CERTIFICATE [cert_keyProtection];  
    GO  
    
  4. Připojte se k samostatné instanci serveru, otevřete jiné okno dotazu a spusťte výše uvedené příkazy SQL, abyste vytvořili stejný klíč na druhém serveru.

  5. Otestujte klíče tak, že nejprve spustíte příkaz OPEN SYMMETRIC KEY a níže uvedený příkaz SELECT na prvním serveru.

    OPEN SYMMETRIC KEY [key_DataShare]   
        DECRYPTION BY CERTIFICATE cert_keyProtection;  
    GO  
    SELECT encryptbykey(key_guid('key_DataShare'), 'MyData' )  
    GO  
    -- For example, the output might look like this: 0x2152F8DA8A500A9EDC2FAE26D15C302DA70D25563DAE7D5D1102E3056CE9EF95CA3E7289F7F4D0523ED0376B155FE9C3  
    
  6. Na druhém serveru vložte výsledek předchozího příkazu SELECT do následujícího kódu jako hodnotu @blob a spuštěním následujícího kódu ověřte, že duplicitní klíč může šifrovací text dešifrovat.

    OPEN SYMMETRIC KEY [key_DataShare]   
        DECRYPTION BY CERTIFICATE cert_keyProtection;  
    GO  
    DECLARE @blob varbinary(8000);  
    SELECT CONVERT(varchar(8000), decryptbykey(@blob));  
    GO  
    
  7. Zavřete symetrický klíč na obou serverech.

    CLOSE SYMMETRIC KEY [key_DataShare];  
    GO  
    

Změny šifrování v SQL Serveru 2017 CU2

SQL Server 2016 používá algoritmus hash SHA1 pro svou práci s šifrováním. Od verze SQL Server 2017 se místo toho používá SHA2. To znamená, že další kroky můžou být nutné k tomu, aby vaše instalace SQL Serveru 2017 dešifrovala položky, které byly zašifrovány SQL Serverem 2016. Tady jsou další kroky:

  • Ujistěte se, že je SQL Server 2017 aktualizovaný na alespoň kumulativní aktualizaci 2 (CU2).
  • Po instalaci CU2 zapněte příznak trasování 4631 v SQL Serveru 2017: DBCC TRACEON(4631, -1);
    • Příznak trasování 4631 je v SQL Serveru 2017 nový. Před vytvořením hlavního klíče, certifikátu nebo symetrického klíče v SQL Serveru 2017 musí být příznaku trasování 4631 přiřazena hodnota ON globálně. To umožňuje těmto vytvořeným položkám spolupracovat s SQL Serverem 2016 a staršími verzemi. Tento příznak trasování by měl být dočasně zapnutý pro opětovné šifrování dat pomocí klíčů odvozených ze SHA2.

Další informace najdete tady:

Viz také