如何使用 EKM 启用 TDE

透明数据加密 (TDE) 对整个数据库的存储进行加密。TDE 使用称为数据库加密密钥的对称密钥加密数据。本主题介绍如何使用存储在可扩展密钥管理 (EKM) 模块中的非对称密钥来保护数据库加密密钥。

还可以使用受 master 数据库的数据库主密钥保护的证书来保护数据库加密密钥。有关使用数据库主密钥保护数据库加密密钥的详细信息,请参阅了解透明数据加密 (TDE)

使用 EKM 启用 TDE 的基本步骤如下所示:

  1. 安装 EKM 提供程序。此步骤的过程会随 EKM 提供程序的要求不同而有所不同,但可能包括在本地证书存储区中安装 EKM 提供程序的证书、将 EKM DLL 文件复制到 SQL Server 计算机中。

  2. 将 SQL Server 配置为使用 EKM 提供程序。

  3. 如果 EKM 模块使用的是基本身份验证,请创建一个凭据并将该凭据添加到用户。

  4. 创建一个受 EKM 提供程序保护的非对称密钥。

  5. 如果 EKM 模块使用的是基本身份验证,请创建一个受数据库引擎所使用的非对称密钥保护的凭据。

  6. 创建一个对称数据库加密密钥。

  7. 使用该数据库加密密钥启用 TDE。

若要完成本主题的步骤,请在 SQL Server Management Studio 中使用查询编辑器窗口连接至 SQL Server。

安装和配置加密提供程序

  1. 将 EKM 提供程序提供的文件复制到 SQL Server 计算机上的相应位置。在本示例中,我们使用 C:\EKM 文件夹。

  2. 根据 EKM 提供程序的要求,将证书安装到计算机上。

    注意注意

    SQL Server 不提供 EKM 提供程序。每个 EKM 提供程序可以有不同的安装、配置和授权用户的过程。请查阅 EKM 提供程序文档,完成此步骤。

将 SQL Server 配置为使用 EKM 提供程序并在 SQL Server 中创建该提供程序

  1. 启用 EKM 提供程序是一个高级选项。首先执行下面的语句以显示高级选项。

    sp_configure 'show advanced options', 1 ;
    GO
    RECONFIGURE ;
    GO
    
  2. 执行下面的语句以启用 EKM 提供程序:

    sp_configure 'EKM provider enabled', 1 ;
    GO
    RECONFIGURE ;
    GO
    
  3. 执行下面的语句以根据 EKM 提供程序创建调用 EKM_Prov 所选择的加密提供程序:

    CREATE CRYPTOGRAPHIC PROVIDER EKM_Prov 
    FROM FILE = 'C:\EKM_Files\KeyProvFile.dll' ;
    GO
    
    注意注意

    EKM DLL 必须进行数字签名。

创建用于加密数据库的凭据

必须是高特权用户(如系统管理员)才能创建数据库加密密钥以及加密数据库。该用户必须能够通过 EKM 模块进行身份验证。下面的过程创建一个使用 EKM 标识的凭据,并将该凭据添加到高特权用户。下面的过程假定 EKM 模块可以对名为“Identity1”的用户进行身份验证。应提供密码代替此处显示的星号。当 EKM 提供程序使用基本身份验证时需要执行这些步骤,但当 EKM 模块使用其他身份验证时可以跳过本部分中的步骤。

创建凭据并将其添加到高特权用户的登录名

  1. 执行下面的语句,以创建将由系统管理员使用的凭据:

    CREATE CREDENTIAL sa_ekm_tde_cred 
    WITH IDENTITY = 'Identity1', 
    SECRET = '*************' 
    FOR CRYPTOGRAPHIC PROVIDER EKM_Prov ;
    GO
    
  2. 执行下面的语句,以便将系统管理员凭据添加到高特权用户,如格式为 [DOMAIN\login] 的您自己的域登录名:

    ALTER LOGIN [DOMAIN\login]
    ADD CREDENTIAL sa_ekm_tde_cred ;
    GO
    

创建非对称密钥

创建一个非对称密钥以保护对数据库加密密钥的访问。SQL Server 使用此密钥访问数据库加密密钥。

创建数据库加密密钥

  • 执行下面的语句,创建一个存储在 EKM 提供程序内的非对称密钥。在本示例中,SQL Server 将按名称 ekm_login_key 标识该密钥。在 EKM 设备内,该密钥将具有名称 SQL_Server_Key。

    注意注意

    您的 EKM 提供程序所需的选项和参数可能与此语句有所不同。有关详细信息,请参阅 EKM 提供程序。

    USE master ;
    GO
    CREATE ASYMMETRIC KEY ekm_login_key 
    FROM PROVIDER [EKM_Prov]
    WITH ALGORITHM = RSA_512,
    PROVIDER_KEY_NAME = 'SQL_Server_Key' ;
    GO
    
    注意注意

    如果存储在 EKM 模块中的非对称密钥丢失,SQL Server 将无法打开数据库。如果 EKM 提供程序允许您备份非对称密钥,则应该创建备份并将该备份存储到安全的位置。

创建数据库引擎使用的凭据

启动时,数据库引擎必须打开数据库。下面的过程创建一个通过 EKM 进行身份验证的凭据,并将该凭据添加到一个基于非对称密钥的登录名。用户无法使用该登录名进行登录,但数据库引擎将能够通过 EKM 设备对其自身进行身份验证。下面的过程假定 EKM 模块可以对名为“Identity2”的用户进行身份验证。应提供密码代替下面的星号。当 EKM 提供程序使用基本身份验证时需要执行这些步骤,但当 EKM 模块使用其他身份验证时可以跳过本部分中的步骤。

创建凭据并将其添加到登录名

  1. 执行下面的语句,以创建将由数据库引擎使用的凭据:

    CREATE CREDENTIAL ekm_tde_cred 
    WITH IDENTITY = 'Identity2' 
    , SECRET = '*************' 
    FOR CRYPTOGRAPHIC PROVIDER EKM_Prov ;
    
  2. 执行下面的语句,以便添加 TDE 使用的登录名,并将新凭据添加到该登录名中:

    CREATE LOGIN EKM_Login 
    FROM ASYMMETRIC KEY ekm_login_key ;
    GO
    
    ALTER LOGIN EKM_Login 
    ADD CREDENTIAL ekm_tde_cred ;
    GO
    

创建数据库加密密钥

数据库加密密钥是对称密钥。在 master 数据库中创建数据库加密密钥。

创建数据库加密密钥

  1. 更改为将加密的数据库:

    USE AdventureWorks2008R2 ;
    GO
    
  2. 执行下面的代码,以创建将用于 TDE 的数据库加密密钥:

    CREATE DATABASE ENCRYPTION KEY
    WITH ALGORITHM  = AES_128
    ENCRYPTION BY SERVER ASYMMETRIC KEY ekm_login_key ;
    GO
    
  3. 执行下面的代码,以将数据库更改为启用透明数据加密:

    ALTER DATABASE AdventureWorks2008R2 
    SET ENCRYPTION ON ;
    GO
    

    此时数据库以加密格式存储。

安全性

本主题使用了以下权限:

  • 若要更改配置选项以及运行 RECONFIGURE 语句,您必须具有 ALTER SETTINGS 服务器级别权限。sysadmin 和 serveradmin 固定服务器角色隐式具有 ALTER SETTINGS 权限。

  • 需要 ALTER ANY CREDENTIAL 权限。

  • 需要 ALTER ANY LOGIN 权限。

  • 需要 CREATE ASYMMETRIC KEY 权限。

  • 需要拥有对数据库的 CONTROL 权限才能加密该数据库。