使用 EKM 在 SQL Server 上启用 TDE

适用范围:SQL Server

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

TDE 使用称为数据库加密密钥的对称密钥来加密整个数据库的存储。 还可以使用受主数据库的数据库主密钥保护的证书来保护数据库加密密钥。 有关使用数据库主密钥来保护数据库加密密钥的详细信息,请参阅透明数据加密 (TDE)。 有关当 SQL Server 在 Azure VM 上运行时配置 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 权限由 sysadminserveradmin 固定服务器角色隐式持有。

  • 需要 ALTER ANY CREDENTIAL 权限。

  • 需要 ALTER ANY LOGIN 权限。

  • 需要 CREATE ASYMMETRIC KEY 权限。

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

“使用 Transact-SQL”

使用 EKM 启用 TDE

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

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

    注意

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

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

  4. 在标准菜单栏上,单击 “新建查询”

  5. 将以下示例复制并粘贴到查询窗口中,然后单击“执行” 。

    -- Enable advanced options.  
    sp_configure 'show advanced options', 1 ;  
    GO  
    RECONFIGURE ;  
    GO  
    -- Enable EKM provider  
    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 = 'q*gtev$0u#D1v'   
    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 = 'jeksi84&sLksi01@s'   
    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  
    

有关详细信息,请参阅以下部分:

另请参阅

借助 Azure SQL 数据库实现透明数据加密