ssis - 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。
解决方案
我最近花了很多时间来完成这件事。如果您使用 ECEK 收到错误 12038,那么您需要在 Azure SQL db 中更新您的主密钥,而不需要:443。当 ODBC 连接尝试将 url 与 AKV 中的 url 匹配时,这会产生错误。这是简短的答案。我计划一有时间就提供整个解决方案。
推荐阅读
- haskell - How to find out if it's summer or winter time?
- ios - 尝试为新闻提要创建 timeAgo 函数,但它只显示“0 秒前”
- python - Python - 不确定如何将元组附加到字典值
- azure - 通过 HTTPS 将 Azure AppService 连接到 VM 上的应用程序
- c - 设置区域设置不起作用
- rest - 如何使用rest api写入firebase数据库?
- java - 存储、检索、编辑和删除数据
- c# - 如何执行异步等待函数导入/SP EF6
- python - 类中的方法不会接受参数
- azure - 删除了一个 Azure 应用服务插槽,现在我在尝试重新创建它时无法取回原始主机名