将 TDE 保护的数据库移到其他 SQL Server

本主题介绍通过使用透明数据加密 (TDE) 保护 SQL Server 数据库、然后将数据库移到 SQL Server 的其他实例的步骤。

主题内容

  • 开始之前:

    背景

    安全性

  • 示例:

    创建由透明数据加密保护的数据库

    将 TDE 保护的数据库移到 SQL Server 的新实例

  • **跟进:**在将 TDE 保护的数据库移到 SQL Server 的新实例后采取的步骤

后台

TDE 可对数据和日志文件执行实时 I/O 加密和解密。这种加密使用数据库加密密钥 (DEK),该密钥存储在数据库引导记录中以供恢复时使用。DEK 是使用存储在服务器的 master 数据库中的证书保护的对称密钥,或者是由 EKM 模块保护的非对称密钥。在移动 TDE 保护的数据库时,您还必须移动用于打开 DEK 的证书或非对称密钥。该证书或非对称密钥必须安装在目标服务器的 master 数据库中,以便 SQL Server 可以访问数据库文件。有关详细信息,请参阅了解透明数据加密 (TDE)

安全性

权限

要求针对 master 数据库的 CONTROL DATABASE 权限以便创建数据库主密钥。

要求针对 master 数据库的 CREATE CERTIFICATE 权限以便创建保护 DEK 的证书。

需要针对加密数据库的 CONTROL DATABASE 权限和针对用于加密数据库加密密钥的证书或非对称密钥的 VIEW DEFINITION 权限。

[返回页首]

创建 TDE 保护的数据库

为了创建透明数据加密保护的数据库,使用由 master 数据库中的证书保护的数据库加密密钥。

创建由透明数据加密保护的数据库

  1. 在查询编辑器中,输入以下 Transact-SQL 命令以便创建数据库主密钥和 master 数据库中的证书。

    安全说明安全说明

    使用密码替换星号。不要使用空密码。请使用强密码。

    USE master ;
    GO
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '**************';
    GO
    CREATE CERTIFICATE TestSQLServerCert 
    WITH SUBJECT = 'Certificate to protect TDE key'
    GO
    
  2. 创建 master 数据库中服务器证书的备份。如果用于保护数据库加密密钥的证书丢失,您将无法访问 TDE 保护的数据库中的数据。下面的示例将证书和私钥文件的备份存储于此 SQL Server 实例的默认数据位置中 (C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA)。

    安全说明安全说明

    您必须保留证书文件和私钥文件的备份,以便还原证书。用于私钥的密码不必与数据库主密钥密码相同。

    BACKUP CERTIFICATE TestSQLServerCert 
    TO FILE = 'TestSQLServerCert'
    WITH PRIVATE KEY 
    (
        FILE = 'SQLPrivateKeyFile',
        ENCRYPTION BY PASSWORD = '**************'
    );
    GO
    
  3. 创建 TDE 保护的数据库。

    CREATE DATABASE CustRecords ;
    GO
    
  4. 切换到这个新数据库。创建 master 数据库中的服务器证书保护的数据库加密密钥。然后更改新数据库,以便使用 TDE 对数据库进行加密。

    USE CustRecords;
    GO
    CREATE DATABASE ENCRYPTION KEY
    WITH ALGORITHM = AES_128
    ENCRYPTION BY SERVER CERTIFICATE TestSQLServerCert;
    GO
    ALTER DATABASE CustRecords
    SET ENCRYPTION ON;
    GO
    
    注意注意

    若要使用 SQL Server Management Studio 执行此步骤,请在对象资源管理器中,右键单击该数据库,指向这些任务,然后单击“管理数据库加密”。使用“管理数据库加密”对话框可以选择加密密钥并且启用数据库加密。

  5. 创建一个简单表。将数据输入到该表中,然后从该表进行选择以便测试数据库。

    CREATE TABLE CustomerRecord
        (CustomerID int PRIMARY KEY,
        SecretData nvarchar(100) NOT NULL) ;
    GO
    INSERT CustomerRecord (CustomerID,SecretData)
    VALUES (23997, 'Plain text data') ;
    GO
    SELECT CustomerID, SecretData FROM CustomerRecord ;
    GO
    

[返回页首]

移动 TDE 保护的数据库

将 TDE 保护的数据库移到 SQL Server 的新实例

  1. 将 TDE 保护的数据库与源服务器分离。

    USE master ;
    GO
    EXEC master.dbo.sp_detach_db @dbname = N'CustRecords';
    GO
    
    注意注意

    若要通过使用 Management Studio 执行此步骤,请在对象资源管理器中,右键单击该数据库,指向这些任务,然后单击“分离”。单击“确定”。

  2. 使用 Window 资源管理器,将数据库文件从源服务器移动到或复制到目标服务器上的相同位置。

    注意注意

    通常,这两个数据库文件(CustomerRecords.mdfCustomerRecords_log.LDF)将位于默认位置 C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA。您的文件名和位置可能会有所不同。

  3. 使用 Window 资源管理器,将服务器证书和私钥文件的备份从源服务器移动到或复制到目标服务器上的相同位置。在我们的示例中,这些文件存储于位于 C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA 的默认数据文件夹中。

  4. 在 SQL Server 的目标实例上创建数据库主密钥。该密码不必与源服务器相同。

    USE master;
    GO
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '**************';
    GO
    
  5. 通过使用原始服务器证书备份文件重新创建服务器证书。密码必须与在创建备份时使用的密码相同。

    CREATE CERTIFICATE TestSQLServerCert 
    FROM FILE = 'TestSQLServerCert'
    WITH PRIVATE KEY 
    (
        FILE = 'SQLPrivateKeyFile',
        DECRYPTION BY PASSWORD = '**************'
    );
    GO
    
  6. 附加要移动的数据库。数据库文件的路径必须是存储数据库文件的位置。

    CREATE DATABASE [CustRecords] ON 
    ( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\CustRecords.mdf' ),
    ( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\CustRecords_log.LDF' )
    FOR ATTACH ;
    GO
    
    注意注意

    若要通过使用 Management Studio 执行此步骤,请在对象资源管理器中右键单击“数据库”,然后单击“附加”。单击“添加”以便找到 CustRecords.mdf 文件,然后单击“确定”

  7. 通过选择表中的数据测试对数据库的访问。

    USE CustRecords ;
    GO
    SELECT CustomerID, SecretData FROM CustomerRecord ;
    GO
    

    [返回页首]

跟进:在将 TDE 保护的数据库移到 SQL Server 的新实例后采取的步骤

备份 master 数据库

  • 安装证书和附加数据库更改了 master 数据库中的信息。因此,您应该创建 master 数据库的新备份。

[返回页首]