使用 EKM 在 SQL Server 上启用透明数据加密

适用范围:SQL Server

本文介绍如何在 SQL Server 中启用透明数据加密 (TDE),以便通过结合使用存储在可扩展密钥管理 (EKM) 模块中的非对称密钥和 Transact-SQL 来保护数据库加密密钥。

TDE 使用称为数据库加密密钥的对称密钥来加密整个数据库的存储。 还可以使用证书来保护数据库加密密钥,该证书由数据库的数据库主密钥(DMK) master 保护。 有关使用 DMK 保护数据库加密密钥的详细信息,请参阅透明数据加密(TDE)。 有关在 Azure 虚拟机上运行 SQL Server 时配置 TDE 的信息,请参阅使用 Azure Key Vault 的可扩展密钥管理(SQL Server)。 有关使用 Azure 密钥保管库中的密钥配置 TDE 的信息,请参阅 使用具有 SQL 加密功能的 SQL Server 连接器

局限性

必须是高特权用户(如系统管理员)才能创建数据库加密密钥以及加密数据库。 EKM 模块必须能够对该用户进行身份验证。

启动时,数据库引擎必须打开数据库。 应创建将由 EKM 进行身份验证的凭据,并将其添加到基于非对称密钥的登录名。 用户无法使用该登录名登录,但数据库引擎可以使用 EKM 设备对自身进行身份验证。

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

EKM 提供程序所需的选项和参数可能与以下代码示例中提供的选项和参数不同。 有关详细信息,请参阅 EKM 提供程序。

权限

本文使用了以下权限:

  • 若要更改配置选项并运行 RECONFIGURE 语句,必须授予 ALTER SETTINGS 服务器级权限。 ALTER SETTINGS 权限由 sysadmin 和 serveradmin 固定服务器角色隐式拥有。

  • ALTER ANY CREDENTIAL需要权限。

  • ALTER ANY LOGIN需要权限。

  • CREATE ASYMMETRIC KEY需要权限。

  • CONTROL需要对数据库具有加密数据库的权限。

使用 Transact-SQL

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

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

    注意

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

  3. “对象资源管理器” 中,连接到 数据库引擎的实例。

  4. 在标准栏上,选择“新建查询” 。

  5. 将以下示例复制并粘贴到查询窗口中,然后选择 执行

    -- Enable advanced options.
    EXECUTE sp_configure 'show advanced options', 1;
    GO
    
    RECONFIGURE;
    GO
    
    -- Enable EKM provider
    EXECUTE sp_configure 'EKM provider enabled', 1;
    GO
    
    RECONFIGURE;
    GO
    
    -- Create a cryptographic provider, which we have chosen to call "EKM_Prov," based on an EKM provider
    CREATE CRYPTOGRAPHIC PROVIDER EKM_Prov
        FROM FILE = 'C:\EKM_Files\KeyProvFile.dll';
    GO
    
    -- Create a credential that will be used by system administrators.
    CREATE CREDENTIAL sa_ekm_tde_cred
        WITH IDENTITY = 'Identity1',
        SECRET = '<password>' FOR CRYPTOGRAPHIC PROVIDER EKM_Prov;
    GO
    
    -- Add the credential to a high privileged user such as your
    -- own domain login in the format [DOMAIN\login].
    ALTER LOGIN [Contoso\Mary] ADD CREDENTIAL sa_ekm_tde_cred;
    GO
    
    -- create an asymmetric key stored inside the EKM provider
    USE master;
    GO
    
    CREATE ASYMMETRIC KEY ekm_login_key
         FROM PROVIDER [EKM_Prov]
             WITH ALGORITHM = RSA_512,
             PROVIDER_KEY_NAME = 'SQL_Server_Key';
    GO
    
    -- Create a credential that will be used by the Database Engine.
    CREATE CREDENTIAL ekm_tde_cred
        WITH IDENTITY = 'Identity2', SECRET = '<secret>'
        FOR CRYPTOGRAPHIC PROVIDER EKM_Prov;
    
    -- Add a login used by TDE, and add the new credential to the login.
    CREATE LOGIN EKM_Login
        FROM ASYMMETRIC KEY ekm_login_key;
    GO
    
    ALTER LOGIN EKM_Login
        ADD CREDENTIAL ekm_tde_cred;
    GO
    
    -- Create the database encryption key that will be used for TDE.
    USE AdventureWorks2022;
    GO
    
    CREATE DATABASE ENCRYPTION KEY
        WITH ALGORITHM = AES_128
        ENCRYPTION BY SERVER ASYMMETRIC KEY ekm_login_key;
    GO
    
    -- Alter the database to enable transparent data encryption.
    ALTER DATABASE AdventureWorks2022
        SET ENCRYPTION ON;
    GO