【问题标题】:Use SQL Server Always Encrypted with SSIS and Azure Key Vault使用 SQL Server Always Encrypted 与 SSIS 和 Azure Key Vault
【发布时间】: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


【解决方案1】:

这个问题的简短回答是,如果您使用 ODBC 驱动程序连接到 Always Encrypted 数据库,则可以支持请求的方案。 ODBC 驱动程序允许您在连接字符串中指定 AKV 凭据,驱动程序用于连接 AKV 并针对 SQL 执行加密/解密操作。

最好, 乔什

【讨论】:

  • 几乎一直到那里 - 当我选择“预览”时可以看到未加密的数据,但它在执行包时失败并出现上述错误
  • 我也在尝试这个,我很困惑,我们如何在 ODBC 连接字符串中附加 AKV 凭据 - 只是用户 ID 和密码?我还启用了托管标识,所以需要它。 Dsn=Trial;trusted_connection=Yes;database=Trial_DB;columnencryption=Enabled
  • 没关系从docs.microsoft.com/en-us/sql/connect/odbc/…DRIVER=ODBC Driver 13 for SQL Server 找到这个;SERVER=myServer;Trusted_Connection=Yes;DATABASE=myDB;ColumnEncryption=Enabled;KeyStoreAuthentication=KeyVaultClientSecret;KeyStorePrincipalId= ;KeyStoreSecret=
【解决方案2】:

这是一个有点旧的线程,但在这里更新以防有人遇到类似错误“[Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Error verifying signature of ECEK。”

确保用于向 Azure Key Vault 进行身份验证的服务原则/AD 应用程序具有以下密钥权限。

获取、列出、解密、解包和验证

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-10
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 2021-02-01
    相关资源
    最近更新 更多