使用 Always Encrypted 向导配置列加密
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例
Always Encrypted 向导是一个功能强大的工具,可让你为所选数据库列设置所需的 Always Encrypted 配置。 根据当前配置和所需的目标配置,该向导可以对列加密或解密(删除加密),或重新对其加密(例如,使用为列配置的新列加密密钥或不同于当前类型的加密类型)。 可以在该向导的单次运行中配置多个列。
该向导允许使用现有列加密密钥对列进行加密,也可以选择生成新的列加密密钥,或同时生成新的列加密密钥和新的列主密钥。
如果数据库配置了安全 Enclave,则无需将数据移出数据库,即可就地运行加密操作。 如果任何依赖项会阻止要加密的列的架构更改,向导将移除所有此类依赖项。 这将通过使用数据库引擎中的 Enclave 对每个列进行就地加密。 加密完成后,向导将重新创建依赖项。 有关具有安全 Enclave 的 Always Encrypted 的详细信息,请参阅具有安全 Enclave 的 Always Encrypted。
如果数据库未配置安全 Enclave,向导将为你提供启用安全 Enclave 的机会。 如果你选择不启用安全 Enclave,或者未使用已启用 Enclave 的密钥,则向导会将数据移出数据库并在 SSMS 进程中执行加密操作。 该向导会在数据库中创建具有所需加密配置的一个或多个新表,从原始表中加载所有数据,执行请求的加密操作,将数据上传到新表中,然后将原始表换为新表。
提示
在环境中使用具有安全 Enclave 的 Always Encrypted 就地加密,可以大幅缩短加密操作的时间并提高可靠性。
注意
运行加密操作可能需要很长时间。 在此期间,数据库不可用于写入事务。 建议将 PowerShell 作为对较大表执行加密操作的工具。 请参阅 通过 PowerShell 配置使用 Always Encrypted 的列加密,或 通过 PowerShell 配置就地列加密。
有关显示如何使用向导配置 Always Encrypted 并在客户端应用程序中使用它的端到端演练,请参阅以下 Azure SQL 数据库教程:
有关 Always Encrypted 密钥的信息,请参阅 Always Encrypted 密钥管理概述。
有关 Always Encrypted 中支持的加密类型的信息,请参阅选择确定性加密或随机加密。
权限
若要使用该向导执行加密操作,必须拥有“查看任意列主密钥定义”和“查看任意列加密密钥定义”权限。 还需要密钥存储权限来创建、访问和使用列主密钥。 有关密钥存储库权限的详细信息,请参阅 创建并存储 Always Encrypted 的列主密钥,然后查找与密钥存储库相关的部分。
打开 Always Encrypted 向导
可以在三个不同的级别启动该向导:
- 在数据库级别 - 如果要加密位于不同表中的多列。
- 在表级别 - 如果要加密位于相同表中的多列。
- 在列级别 - 如果要加密一个特定列。
使用 SQL Server Management Studio 的对象资源管理器组件连接到 SQL Server。
若要进行加密,请执行以下操作:
- 对于位于数据库不同表中的多列,请右键单击数据库,指向“任务”,然后选择“加密列”。
- 对于位于相同表中的多列,请导航到该表,右键单击它,然后选择“加密列”。
- 对于单个列,请导航到该列,右键单击它,然后选择“加密列”。
列选择页
在此页中,可选择要加密、重新加密或解密的列,并为所选列定义目标加密配置。
若要加密纯文本列(未加密的列),请为列选择加密类型(“确定性”或“随机”)和加密密钥。
若要为已加密列更改加密类型或轮换(更改)列加密密钥,请选择所需加密类型和密钥。
如果希望该向导使用新的列加密密钥加密或重新加密一列或多列,请选取在名称中包含“(New)”的密钥。 该向导会生成密钥。
若要解密当前已加密的列,请为加密类型选择“纯文本”。
注意
如果要利用就地加密,并且正在使用现有密钥,请确保选择已启用 Enclave 的密钥 - 注释为“(已启用 Enclave)”。
注意
该向导不支持对临时表和内存中表执行加密操作。 可以使用 Transact-SQL 创建空的临时表或内存中表,并使用应用程序插入数据。
主密匙配置页
如果在上一页中为任何列选择了自动生成的列加密密钥,则在此页中需要选择现有列主密钥,或者配置将加密列加密密钥的新的列主密钥。
配置新的列主密钥时,可以在 Windows 证书存储或 Azure Key Vault 中选取现有密钥,并让该向导仅在数据库中为密钥创建元数据对象,也可以选择在数据库中同时生成密钥和用于描述密钥的元数据对象。
要使用就地加密,请确保为新的列主密钥选择“允许 Enclave 计算”。 仅当数据库配置了安全 Enclave 时,才允许选择此复选框。
有关在 Windows 证书存储、Azure Key Vault 或其他密钥存储库中创建和存储列主密钥的详细信息,请参阅 创建并存储 Always Encrypted 的列主密钥 或 管理具有安全 Enclave 的 Always Encrypted 密钥。
提示
该向导仅允许在 Windows 证书存储和 Azure Key Vault 中浏览和创建密钥。 它还会自动生成新密钥和用于描述密钥的数据库元数据对象的名称。 如果你需要更好地控制密钥预配方式(并对包含列主密钥的密钥存储有更多选择),可以使用“新建列主密钥”和“新建列加密密钥”对话框先创建密钥,然后运行该向导并选取所创建的密钥。 请参阅 使用“新建列主密钥”对话框预配列主密钥 或 预配启用 Enclave 的密钥,以及 使用“新建列加密密钥”对话框预配列加密密钥。
“就地加密设置”页
如果在数据库中配置了安全 Enclave,并且使用的是已启用 Enclave 的密钥,则此页面允许指定就地加密所需的 Enclave 证明参数。 如果不想使用就地加密,请取消选择“对符合条件的列使用就地加密”以继续使用客户端加密。 建议将此复选框保留为启用状态,以便向导可以使用就地加密。
有关 Enclave 证明的详细信息,请参阅 使用 Azure 证明配置 Always Encrypted 证明
后续步骤
- 通过 SQL Server Management Studio 查询使用 Always Encrypted 的列
- 使用安全 enclave 运行 Transact-SQL 语句
- 使用 Always Encrypted 开发应用程序
- 教程:使用具有安全 enclave 的 Always Encrypted 开发 .NET 应用程序
另请参阅
- Always Encrypted
- 具有安全 Enclave 的 Always Encrypted
- Always Encrypted 密钥管理概述
- 使用 SQL Server Management Studio 配置 Always Encrypted
- 配置和使用具有安全 enclave 的 Always Encrypted
- 使用 PowerShell 预配 Always Encrypted 密钥
- 使用 PowerShell 预配已启用 enclave 的密钥
- 通过 PowerShell 配置使用 Always Encrypted 的列加密
- 使用 PowerShell 配置就地列加密
- 使用 Always Encrypted 和 DAC 包配置列加密
- 使用 DACPAC 包配置就地列加密
- 使用 Transact-SQL 就地配置列加密