使用 SQL Server Management Studio 预配 Always Encrypted 密钥

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例

本文提供了使用 SQL Server Management Studio (SSMS) 预配 Always Encrypted 的列主密钥和列加密密钥的步骤。 预配加密密钥时,请确保已安装 SSMS 的最新正式发布 (GA) 版本。

有关 Always Encrypted 密钥管理的概述(包括最佳做法建议和重要的安全注意事项),请参阅 Always Encrypted 密钥管理概述

使用“新建列主密钥”对话框预配列主密钥

“新建列主密钥” 对话框允许你生成列主密钥或选择密钥存储中的现有密钥,并在数据库中为所创建或所选择的密钥创建列主密钥元数据。

  1. 使用“对象资源管理器”,导航到数据库下面的“安全 -> Always Encrypted 密钥”文件夹。

  2. 右键单击“列主密钥”文件夹节点,然后选择“新建列主密钥...”

  3. 在“新建列主密钥” 对话框中,输入列主密钥元数据对象的名称。

  4. 选择密钥存储:

    • 证书存储 - 当前用户 - 指示当前用户证书存储在 Windows 证书存储中的位置,这是你的个人存储。

    • 证书存储 - 本地计算机 - 指示本地计算机证书存储在 Windows 证书存储中的位置。

    • Azure Key Vault - 需要登录到 Azure(单击“登录”)。 登录后,将能够选择一个 Azure 订阅和一个密钥保管库或托管 HSM(需要 SSMS 18.9 或更高版本)。

      注意

      使用 Azure Key Vault 中的托管 HSM 中存储的列主密钥需要 SSMS 18.9 或更高版本。

    • 密钥存储提供程序(KSP) - 指明可通过实现下一代加密技术 (CNG) API 的密钥存储提供程序 (KSP) 访问的密钥存储。 通常,这种存储是硬件安全模块 (HSM)。 选择此选项后,需要选择 KSP。 “Microsoft 软件密钥存储提供程序” 默认处于选中状态。 如果你想使用存储在 HSM 中的列主密钥,请为设备选择 KSP(必须在打开该对话框之前在计算机上安装并配置 KSP)。

    • 加密服务提供程序(CSP) - 可通过实现加密 API (CAPI) 的加密服务提供程序 (CSP) 访问的密钥存储。 通常,这种存储是硬件安全模块 (HSM)。 选择此选项后,需要选择 CSP。 如果你想使用存储在 HSM 中的列主密钥,请为设备选择 CSP(必须在打开该对话框之前在计算机上安装并配置 CSP)。

    注意

    由于 CAPI 是已弃用的 API,因此,“加密服务提供程序(CAPI)”选项默认处于禁用状态。 你可以通过在 Windows 注册表中的 [HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\sql13\Tools\Client\Always Encrypted] 项下面创建“已启用 CAPI 提供程序”DWORD 值并将其设置为 1,来启用该选项。 应使用 CNG 而不是 CAPI,除非密钥存储不支持 CNG。

    有关上述密钥存储的详细信息,请参阅创建并存储 Always Encrypted 的列主密钥

  5. 如果使用的是 SQL Server 2019 (15.x),并且 SQL Server 实例配置有安全 enclave,则可以选中“允许 enclave 计算”复选框以启用主密钥 enclave。 有关详细信息,请参阅具有安全 enclave 的 Always Encrypted

    注意

    如果 SQL Server 实例未正确配置有安全 enclave,则不会显示“允许 enclave 计算”复选框

  6. 选择密钥存储中的现有密钥,或者单击“生成密钥”或“生成证书”按钮,在密钥存储中创建一个密钥。

  7. 单击“确定”,新密钥随即出现在列表中。

完成此对话框中的选择后,SQL Server Management Studio 会在数据库中为列主密钥创建元数据。 该对话框生成并发出 CREATE COLUMN MASTER KEY (Transact-SQL) 语句。

如果要配置已启用 enclave 的列主密钥,SSMS 还会使用列主密钥对元数据进行签名。

预配列主密钥所需的权限

你需要具有数据库中的 ALTER ANY COLUMN MASTER KEY 数据库权限才能使此对话框创建列主密钥。 还需要密钥存储权限来访问和使用密钥列主密钥。 有关密钥管理操作所需的密钥存储权限的详细信息,请参阅创建并存储 Always Encrypted 的列主密钥,查看与密钥存储相关的部分。

使用“新建列加密密钥”对话框预配列加密密钥

“新建列加密密钥”对话框允许生成列加密密钥、使用列主密钥对其加密,以及在数据库中创建列加密密钥元数据。

  1. 使用 对象资源管理器导航到数据库下面的“安全”/“始终加密密钥” 文件夹。
  2. 右键单击“列加密密钥”文件夹,然后选择“新建列加密密钥...”
  3. 在“新建列加密密钥” 对话框中,输入列加密密钥元数据对象的名称。
  4. 在数据库中选择一个表示列主密钥的元数据对象。
  5. 单击“确定”。

完成对话框后,SQL Server Management Studio (SSMS) 将生成新的列加密密钥。 然后,SSMS 会检索从数据库中选择的列主密钥的元数据。 然后,SSMS 会使用此列主密钥元数据来访问包含你的列主密钥的密钥存储并对列加密密钥进行加密。 最后,SSMS 通过生成并发出 CREATE COLUMN ENCRYPTION KEY (Transact-SQL) 语句,为数据库中新的列加密创建元数据数据。

注意

使用 Azure Key Vault 中的托管 HSM 中存储的列主密钥需要 SSMS 18.9 或更高版本。

预配列加密密钥所需的权限

你需要具有数据库中的 ALTER ANY COLUMN ENCRYPTION KEY 和 VIEW ANY COLUMN MASTER KEY DEFINITION 数据库权限才能使此对话框创建列加密密钥元数据以及访问列主密钥元数据。 还需要密钥存储权限来访问和使用列主密钥。 有关密钥管理操作所需的密钥存储权限的详细信息,请参阅创建并存储 Always Encrypted 的列主密钥,查找与密钥存储相关的部分。

使用 Always Encrypted 向导预配 Always Encrypted 密钥

Always Encrypted 向导是用于加密、解密和重新加密所选数据库列的工具。 尽管它可以使用已配置的密钥,但也使你可以生成新的列主密钥和新的列加密。

后续步骤

另请参阅