Поделиться через


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

Область применения: 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.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'My p@55w0Rd';  
    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.

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

См. также