Создание идентичных симметричных ключей на двух серверах

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

В этом разделе описывается, как создать идентичные симметричные ключи на двух разных серверах в SQL Server с помощью Transact-SQL. Для расшифровки текста необходим ключ, который был использован для его шифрования. Если шифрование и расшифровка выполняются в той же базе данных, ключ будет храниться в базе данных и будет доступным для шифрования и расшифровки в зависимости от разрешений. Но если шифрование и расшифровка выполняются в разных базах данных или на разных серверах, ключ будет храниться в одной из них и будет недоступным для использования в другой.

ограничения и ограничения

  • После создания симметричный ключ должен быть зашифрован с помощью хотя бы одного из следующих средств: сертификат, пароль, симметричный ключ, асимметричный ключ или PROVIDER. Ключ может быть зашифрован более чем один раз для каждого типа шифрования. Другими словами, один симметричный ключ может быть зашифрован с использованием нескольких сертификатов, симметричных ключей и асимметричных ключей одновременно.

  • Если симметричный ключ шифруется с использованием пароля вместо открытого ключа главного ключа базы данных, то используется алгоритм шифрования TRIPLE DES. Поэтому ключи, созданные с помощью сильных алгоритмов шифрования, таких как AES, защищены с помощью более слабого алгоритма.

Безопасность

Разрешения

Требуется разрешение ALTER ANY SYMMETRIC KEY в базе данных. Если AUTHORIZATION задано, требуется разрешение IMPERSONATE для пользователя базы данных или разрешения ALTER для роли приложения. Если шифрование выполняется с использованием сертификата или асимметричного ключа, требуется разрешение VIEW DEFINITION для сертификата или асимметричного ключа. Только имена входа Windows, имена входа SQL Server и роли приложений могут принадлежать симметричным ключам. Симметричные ключи не могут принадлежать группам и ролям.

Использование Transact-SQL

Создание идентичных симметричных ключей на двух разных серверах

  1. В обозревателе объектов подключитесь к экземпляру ядра СУБД.

  2. На стандартной панели выберите пункт Создать запрос.

  3. Создайте ключ, выполнив следующие операторы: CREATE MASTER KEY, CREATE CERTIFICATE и CREATE SYMMETRIC KEY. Замените <password> допустимым паролем.

    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. Подключитесь к отдельному экземпляру сервера, откройте новое окно запросов и выполните приведенные выше SQL-инструкции для создания того же ключа на втором сервере.

  5. Проверьте ключи, сначала выполнив OPEN SYMMETRIC KEY инструкцию и инструкцию SELECT ниже на первом сервере.

    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. На втором сервере вставьте результат выполнения предыдущего оператора SELECT в следующий код в качестве значения @blob, а затем запустите этот код, чтобы проверить, что ключ-дубликат может расшифровать шифротекст.

    OPEN SYMMETRIC KEY [key_DataShare]   
        DECRYPTION BY CERTIFICATE cert_keyProtection;  
    GO  
    DECLARE @blob varbinary(8000);  
    SELECT CONVERT(varchar(8000), decryptbykey(@blob));  
    GO  
    
  7. Закройте симметричные ключи на обоих серверах.

    CLOSE SYMMETRIC KEY [key_DataShare];  
    GO  
    

Изменения шифрования в SQL Server 2017 CU2

Для шифрования в SQL Server 2016 используется алгоритм хэширования SHA1. Начиная с SQL Server 2017, вместо него используется SHA2. Это означает, что расшифровка в SQL Server 2017 элементов, которые были зашифрованы в SQL Server 2016, может потребовать дополнительных действий. Вот дополнительные шаги.

  • Убедитесь, что в SQL Server 2017 установлен по меньшей мере накопительный пакет обновления 2 (CU2).
  • После установки CU2 включите флаг трассировки 4631 в SQL Server 2017: DBCC TRACEON(4631, -1);
    • Флаг трассировки 4631 впервые появился в SQL Server 2017. Флаг трассировки 4631 должен быть ON глобально до создания главного ключа, сертификата или симметричного ключа в SQL Server 2017. Так эти элементы будут пригодны для взаимодействия с SQL Server 2016 и более ранних версий. Этот флаг трассировки должен быть временно включен только для повторного шифрования данных с помощью ключей, производных ОТ SHA2.

Дополнительные сведения см. в разделе: