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


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

Изменения: 12 декабря 2006 г.

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

ms366281.security(ru-ru,SQL.90).gifПримечание безопасности.
Если требуется передать данные для создания ключа (KEY_SOURCE, ALGORITHM и IDENTITY_VALUE) через сетевые подключения между двумя серверами, эти сетевые подключения должны быть зашифрованы. Например, с помощью протоколов SSL или IPSec. За сведениями о выборе и настройке метода шифрования сетевых подключений обратитесь к документации по используемой операционной системе.

Обзор

Создание идентичных симметричных ключей не является сложной операцией. Симметричные ключи, созданные с одинаковыми параметрами KEY_SOURCE, ALGORITHM и IDENTITY_VALUE, будут идентичны. Перед созданием симметричного ключа необходимо убедиться, что инициализированы механизмы управления ключами SQL Server. Если они еще не существуют, необходимо создать главный ключ базы данных для автоматического управления ключами и сертификат, при помощи которого будет производиться шифрование симметричного ключа. Кроме того, симметричный ключ можно защитить паролем. Дополнительные сведения см. в разделе CREATE SYMMETRIC KEY (Transact-SQL).

Пример

В данном примере создаются идентичные симметричные ключи на двух серверах. В этом примере используется алгоритм шифрования AES_256. Алгоритмы шифрования AES не поддерживаются в Windows XP и Windows Server 2000. Необходимо задать другой алгоритм, например TRIPLE_DES.

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

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

    CLOSE SYMMETRIC KEY [key_DataShare];
    GO
    

См. также

Справочник

Иерархия средств шифрования

Другие ресурсы

CREATE MASTER KEY (Transact-SQL)
CREATE CERTIFICATE (Transact-SQL)
CREATE SYMMETRIC KEY (Transact-SQL)
EncryptByKey (Transact-SQL)
DecryptByKey (Transact-SQL)
Выбор алгоритма шифрования

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

12 декабря 2006 г.

Измененное содержимое
  • Исправлен пример.

14 апреля 2006 г.

Измененное содержимое
  • Разъяснено введение.