适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Always Encrypted 向导是一个功能强大的工具,可让你为所选数据库列设置所需的 Always Encrypted 配置。 根据当前配置和所需的目标配置,该向导可以对列加密或解密(删除加密),或重新对其加密(例如,使用为列配置的新列加密密钥或不同于当前类型的加密类型)。 可以在该向导的单次运行中配置多个列。
该向导允许使用现有列加密密钥对列进行加密,也可以选择生成新的列加密密钥,或同时生成新的列加密密钥和新的列主密钥。
如果数据库配置了安全 Enclave,则无需将数据移出数据库,即可就地运行加密操作。 如果任何依赖项会阻止要加密的列的架构更改,向导将移除所有此类依赖项。 这将通过使用数据库引擎中的 Enclave 对每个列进行就地加密。 加密完成后,向导将重新创建依赖项。 有关具有安全 Enclave 的 Always Encrypted 的详细信息,请参阅具有安全 Enclave 的 Always Encrypted。
如果你的数据库未配置安全区,向导将为你提供启用安全区的机会。 如果选择不启用安全保护区,或者未使用启用保护区的密钥,则向导的工作原理是将数据移出数据库,并在 SQL Server Management Studio (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 证明
加密后
请清除所有批处理和存储过程的计划缓存,以刷新访问表的参数加密信息。
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
注意
如果不从缓存中删除受影响查询的计划,加密后的第一次执行查询可能会失败。
使用 ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE
或 DBCC FREEPROCCACHE
仔细清除计划缓存,因为它可能会导致临时查询性能下降。 若要最大程度地减少清除缓存的负面影响,可以选择性地删除仅受影响查询的计划。
调用 sp_refresh_parameter_encryption 更新每个模块(存储过程、函数、视图、触发器)的元数据,这些参数保存在 sys.parameters 中,并且可能已通过加密列来失效。
相关内容
- 通过 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 密钥
- 预配已启用 enclave 的密钥
- 通过 PowerShell 配置使用 Always Encrypted 的列加密
- 使用 PowerShell 配置就地列加密
- 使用 Always Encrypted 和 DAC 包配置列加密
- 使用 DACPAC 包配置就地列加密
- 使用 Transact-SQL 就地配置列加密