如何在两个服务器上创建相同的对称密钥

更新日期: 2006 年 12 月 12 日

为了对密码进行解密,需要用于加密密码的密钥。在一个数据库中同时执行加密和解密时,密钥保存在数据库中并可同时用于(取决于权限)加密和解密。但在不同的数据库或服务器中执行加密和解密时,保存在一个数据库中的密钥不能用于另一数据库。本主题说明了如何为两个不同的服务器中的数据库提供共享的对称密钥。

ms366281.security(zh-cn,SQL.90).gif安全说明:
如果需要两个服务器之间通过网络连接传递密钥创建数据(KEY_SOURCE、ALGORITHM,以及 IDENTITY_VALUE),请确保这些网络连接已经过加密。例如,使用 SSL 或 IPSec。若要选择和配置适当的网络加密方法,请参阅操作系统文档。

概述

创建相同的对称密钥非常容易。使用相同的 KEY_SOURCE、ALGORITHM 和 IDENTITY_VALUE 密钥选项创建的对称密钥将是相同的。创建对称密钥之前,应该验证是否已初始化 SQL Server 的密钥管理机制。如果不存在管理机制,则应该创建用于启用自动密钥管理的数据库主密钥以及用于加密对称密钥的证书。您也可以选择使用密码来保护对称密钥。有关详细信息,请参阅 CREATE SYMMETRIC KEY (Transact-SQL)

示例

此示例在两个服务器上创建相同的对称密钥。该示例使用 AES_256 加密算法。Windows XP 或 Windows Server 2000 不支持 AES 加密算法;您最好指定其他算法,如 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 帮助

更改历史记录

发布日期 历史记录

2006 年 12 月 12 日

更改的内容:
  • 更正了示例。

2006 年 4 月 14 日

更改的内容:
  • 阐明了介绍。