使用具有安全 enclave 的 Always Encrypted 开发应用程序
适用于: SQL Server 2019 (15.x) 及更高版本 - 仅限 Windows Azure SQL 数据库
具有安全 enclave 的 Always Encrypted 扩展了 Always Encrypted,以便对已加密敏感数据库列实现更丰富的应用程序查询功能。 它利用安全 enclave 技术允许数据库引擎中的查询执行器将对加密列进行的计算委托给数据库引擎进程中的安全 enclave。
先决条件
环境需要满足以下要求才能支持具有安全 Enclave 的 Always Encrypted。
- SQL Server 实例或 Azure SQL 数据库中的数据库服务器必须正确配置为支持 enclave 和证明(如适用/需要)。 有关详细信息,请参阅设置安全 enclave 和证明。
- 确保应用程序:
使用的客户端驱动程序版本支持具有安全 enclave 的 Always Encrypted。
连接到数据库时启用 Always Encrypted。
设置证明协议,该协议确定客户端驱动程序在提交 enclave 查询之前是否必须证明 enclave,如果是,则确定应使用哪个证明服务。 最新的驱动程序版本支持以下证明协议:
- Microsoft Azure 证明 - 使用 Microsoft Azure 证明强制实施证明。
- 主机保护者服务 - 使用主机保护者服务强制实施证明。
- 无 - 允许在没有证明的情况下使用 Enclave。
下表指定对特定 SQL 产品和 Enclave 技术有效的证明协议:
产品 Enclave 技术 支持的证明协议 SQL Server 2019 (15.x) 及更高版本 VBS enclave 主机保护者服务,无 Azure SQL 数据库 SGX Enclave(在 DC 系列数据库中) Microsoft Azure 证明 Azure SQL 数据库 VBS enclave 无 如果使用的是证明,则设置对环境有效的证明 URL。
- 如果使用的是 SQL Server 和主机保护者服务 (HGS),请参阅确定并共享 HGS 证明 URL。
- 如果使用的是具有 Intel SGX enclave 的 Azure SQL 数据库 和 Microsoft Azure 证明,请参阅确定证明策略的证明 URL。
具有安全 enclave 的 Always Encrypted 的客户端驱动程序
若要使用具有安全 enclave 的 Always Encrypted 开发应用程序,需要支持安全 enclave 的 SQL 客户端驱动程序版本。 客户端驱动程序会发挥以下关键作用:
- 在将使用安全 enclave 的查询提交给 SQL Server 或 Azure SQL 数据库 进行执行之前,驱动程序会启动 enclave 证明(如配置),以验证安全 enclave 是否可信并且可安全地用于处理敏感数据。 有关证明的详细信息,请参阅安全 Enclave 证明。
- 客户端驱动程序通过协商共享机密与 enclave 建立安全会话。
- 驱动程序会使用共享机密加密 enclave 需要用于处理查询的列加密密钥,并将密钥发送给 SQL Server,后者会将它们转发给解密密钥的安全 enclave。
- 最后,驱动程序会提交查询以便执行,这会在安全 enclave 中触发计算。
以下客户端驱动程序支持具有安全 enclave 的 Always Encrypted:
.NET Framework 4.6 或更高版本中以及 .NET Core 2.1 或更高版本中用于 SQL Server 的 Microsoft .NET 数据提供程序。 如果要在没有证明的情况下使用 VBS enclave,则需要版本 4.1 或更高版本,它们与 .NET Framework 4.6.1 或更高版本和 .NET Core 3.1 兼容。
Microsoft ODBC Driver for SQL Server 版本 17.4 或更高版本。 如果想要在没有证明的情况下使用 VBS enclave,则需要 版本 18.1 或更高版本。
- 有关详细信息,请参阅在 ODBC 驱动程序中使用 Always Encrypted。
- 有关如何使用 ODBC 为数据库连接启用 enclave 计算的信息,请参阅启用具有安全 Enclave 的 Always Encrypted部分。
Microsoft JDBC Driver for SQL Server 版本 8.2 或更高版本。 如果想要在没有证明的情况下使用 VBS enclave,则需要 版本 12.2 或更高版本。
.NET Framework 4.7.2 或更高版本中的用于 SQL Server 的 .NET Framework 数据提供程序。
- 有关详细信息,请参阅对用于 SQL Server 的 .NET Framework 数据提供程序使用 Always Encrypted。
- 有关分步教程,请参阅教程:开发使用具有安全 enclave 的 Always Encrypted 的 .NET Framework 应用程序
注意
不建议将用于 SQL Server 的 .NET Framework 数据提供程序 (System.Data.SqlClient) 用于新开发。 有关详细信息,请参阅System.Data.SqlClient。