【发布时间】:2017-10-25 04:36:28
【问题描述】:
有没有人成功使用 SSIS 从使用 Always Encrypted 和 Azure Key Vault 中的密钥存储的 SQL Server 中提取和解密数据(不是 Windows Cert Store,我知道这是可能的)?
由于设置对 Azure Key Vault 的访问涉及以编程方式将提供程序注册到 SqlClient,我想知道:
SSIS 脚本任务是否与后续 ADO.NET 数据流任务共享相同的应用程序域/上下文,因为它必须访问 SqlClient 提供程序,设置如下:
var provs = new Dictionary<string, SqlColumnEncryptionKeyStoreProvider>();
provs.Add(SqlColumnEncryptionAzureKeyVaultProvider.ProviderName, azureKeyVaultProvider);
SqlConnection.RegisterColumnEncryptionKeyStoreProviders(providers);
此外,脚本任务默认为 .NET 4.5,但始终加密功能仅在 4.6.1 中可用。当我尝试在脚本编辑器中设置框架时,当我重新打开项目时,它总是重置为 4.5。
我希望找到一个示例,因为设置涉及在 GAC 中注册 Key Vault 和所有依赖项程序集。
2017 年 5 月 5 日更新 感谢@Josh G,我能够使用 ODBC 驱动程序完成这 95% 的工作。
在我的 ODBC 源中,当我选择“预览”时,我现在可以看到未加密的数据,但是在运行包后,我收到以下错误:
错误:0x384 在代理,ODBC 源 [12]:打开数据库连接 (ODBC) 发生错误。状态:'CE202'。本机错误代码:0。 [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]密钥库 提供者 AZURE_KEY_VAULT 未能解密 ECEK https://keyvault.vault.azure.net:443/keys/CMKAuto1/mykey 使用 RSA_OAEP。
错误:代理处的 0x384,ODBC 源 [12]:打开数据库 发生连接 (ODBC) 错误。状态:'CE269'。本机错误代码: 0. [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Error 12038 发送请求到https://mykeyvault.vault.azure.net:443 错误:代理处的 0x384,ODBC 源 [12]:打开数据库连接 (ODBC) 发生错误。状态:'CE263'。本机错误代码:0。 [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]验证错误 ECEK 的签名。
【问题讨论】:
-
4.6.1 不卡住对我来说似乎是一个错误。我的猜测/希望是在编译/保存项目时序列化到 SSIS 包中的程序集使用正确的框架 - 否则任务将具有无效的字节码。我的感觉是,数据流中的 OOB ADO.NET Source 组件不知道如何解密数据,您必须编写自定义脚本组件才能访问它。我没有要确认的 AE 实例或 Azure 密钥库,只有很多假设
-
我知道 OOB ADO 可与 Windows 证书存储一起使用,因此希望上述 sn-p 可用于 keyvault。
-
我能够使其与驱动程序 13.1 或更高版本一起使用。 docs.microsoft.com/en-us/sql/connect/odbc/windows/… 还要检查是否为您正在使用的 Azure AD 应用程序或身份设置了访问策略。获取、创建、删除、列出、更新、导入、备份、恢复、wrapKey、unwrapKey、签名
标签: c# sql-server azure ssis odbc