首页 > 解决方案 > SSIS:使用 Azure Key Store 中的 CMK 插入 Always Encrypted 表时,来自 ODBC 提供程序的错误

问题描述

我正在尝试使用 SSIS (Visual Studio 2017) 将数据插入到 Azure SQL 表中,其中包含通过 Always Encrypted 加密的列,以及存储在 Azure Key Vault 中的列主密钥,但我不断收到错误消息。

根据我在其他帖子中找到的建议,我将 ADO.NET 目标与 ODBC 数据提供程序一起使用。该用户是在 Azure SQL 数据库中预配的 Azure Active Directory 用户,因此它能够登录。它具有在密钥保管库的访问策略中授予它的所有密钥权限。

我的 ODBC 连接字符串如下所示:

DRIVER=ODBC Driver 17 for SQL Server;SERVER=[dbs].database.windows.net;UID=[uid@example.com];PWD=[password];Authentication=ActiveDirectoryPassword;DATABASE=[database];ColumnEncryption=Enabled;KeyStoreAuthentication=KeyVaultPassword;KeyStorePrincipalId=[uid@example.com];KeyStoreSecret=[password]

我希望将其插入表中,但会导致此错误:

[ADO NET 目标 [2]] 错误:数据插入过程中发生异常,提供程序返回的消息是:错误 [CE269] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Error 12038 发送请求到https://[keyvault].vault.azure.net:443错误 [CE263] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]验证 ECEK 签名时出错。错误 [CE202] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]密钥库提供程序 AZURE_KEY_VAULT 未能解密 ECEK https://[keyvault].vault.azure.net:443/keys/[cmk]/ [版本]带有 RSA_OAEP。

我能够通过 SSMS 和自定义控制台应用程序成功插入表,并验证加密是否按预期工作。该错误仅发生在 SSIS。

标签: ssisodbcazure-sql-databaseazure-keyvaultalways-encrypted

解决方案


我最近花了很多时间来完成这件事。如果您使用 ECEK 收到错误 12038,那么您需要在 Azure SQL db 中更新您的主密钥,而不需要:443。当 ODBC 连接尝试将 url 与 AKV 中的 url 匹配时,这会产生错误。这是简短的答案。我计划一有时间就提供整个解决方案。


推荐阅读