适用于: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 中支持的加密类型的信息,请参阅选择确定性加密或随机加密。
权限
若要使用向导执行加密运算,您必须拥有 VIEW ANY COLUMN MASTER KEY DEFINITION 和 VIEW ANY COLUMN ENCRYPTION KEY DEFINITION 权限。 还需要密钥存储权限才能创建、访问和使用列主密钥。 有关密钥存储库权限的详细信息,请参阅 创建并存储 Always Encrypted 的列主密钥,然后查找与密钥存储库相关的部分。
打开 Always Encrypted 向导
可以在三个不同的级别启动该向导:
- 在数据库级别——如果您想加密位于不同表中的多个列。
- 在表级别——如果要加密同一表中的多个列。
- 在列级别 - 如果要加密某个特定列。
使用 SQL Server Management Studio 的对象资源管理器组件连接到 SQL Server。
若要进行加密,请执行以下操作:
- 对于位于数据库不同表中的多列,请右键单击数据库,指向“任务”,然后选择“加密列”。
- 对于位于相同表中的多列,请导航到该表,右键单击它,然后选择“加密列”。
- 对于单个列,请导航到该列,右键单击它,然后选择“加密列”。
列选择页
在此页中,可选择要加密、重新加密或解密的列,并为所选列定义目标加密配置。
若要加密纯文本列(未加密的列),请为列选择加密类型(“确定性”或“随机”)和加密密钥。
若要为已加密列更改加密类型或轮换(更改)列加密密钥,请选择所需加密类型和密钥。
如果希望该向导使用新的列加密密钥加密或重新加密一列或多列,请选取在名称中包含“(New)”的密钥。 该向导会生成密钥。
若要解密当前已加密的列,请为加密类型选择“纯文本”。
注意
如果要使用就地加密,并且使用的是现有密钥,请确保选择已启用 enclave 的密钥 - 带注释的密钥(已启用 enclave)。
注意
向导不支持对临时表和内存中表执行加密操作。 可以使用 Transact-SQL 创建空的临时表或内存中表,并使用应用程序插入数据。
“主密钥配置”页
如果在上一页中为任何列选择了自动生成的列加密密钥,则在此页中需要选择现有列主密钥,或者配置将加密列加密密钥的新的列主密钥。
配置新的列主密钥时,可以在 Windows 证书存储或 Azure 密钥保管库 中选取现有密钥,并让该向导仅在数据库中为密钥创建元数据对象,也可以选择在数据库中同时生成密钥和用于描述密钥的元数据对象。
要使用就地加密,请确保为新的列主密钥选择“允许 Enclave 计算”。 仅当数据库配置了安全 Enclave 时,才允许选择此复选框。
有关在 Windows 证书存储、Azure 密钥保管库 或其他密钥存储中创建和存储列主密钥的详细信息,请参阅 创建和存储 Always Encrypted 的列主密钥,或 使用安全 enclave 管理 Always Encrypted 的密钥。
提示
该向导仅允许在 Windows 证书存储和 Azure 密钥保管库 中浏览和创建密钥。 它还自动生成用于描述密钥的新键和数据库元数据对象的名称。 如果你需要更好地控制密钥预配方式(并对包含列主密钥的密钥存储有更多选择),可以使用“新建列主密钥”和“新建列加密密钥”对话框先创建密钥,然后运行该向导并选取所创建的密钥。 请参阅 使用“新建列主密钥”对话框预配列主密钥 或 预配启用 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 的列
- 使用安全外围运行 Transact-SQL 语句
- 使用 Always Encrypted 开发应用程序
- 教程:使用带安全隔离区的 Always Encrypted 开发 .NET 应用程序
- Always Encrypted
- 配合安全隔离区的 Always Encrypted
- Always Encrypted 密钥管理概述
- 使用 SQL Server Management Studio 配置 Always Encrypted
- 配置和使用带安全区域的 Always Encrypted
- 使用 PowerShell 预配 Always Encrypted 密钥
- 预配已启用 enclave 的密钥
- 使用 PowerShell 配置 Always Encrypted 列加密
- 使用 PowerShell 就地配置列加密
- 使用 Always Encrypted 和 DAC 包配置列加密
- 使用 DAC 包原位配置列加密
- 使用 Transact-SQL 就地配置列加密