encryption - 用户注销后,无法从 SQL 代理进行 GPG 解密
问题描述
设置: - 我正在尝试通过 ssis 包中脚本任务中的 C# 代码解密传入文件。下面是生成的命令,在 Visual Studio 中通过调试模式执行时工作正常。此外,Visual Studio 是使用服务帐户凭据打开的。
--homedir C:\Users\serviceaccounntName\AppData\Roaming\gnupg\" --batch --yes --passphrase MyPassphrase -d -o "outputfileName" --always-trust "SourceFileName"
ISSUE: 一旦通过调试模式运行,通过 SQL 代理作业也可以正常工作。但是,一旦我从设置了所有这些的远程桌面注销,传入的文件就不再通过 SQl 代理作业解密并继续执行。我检查了任务管理器,我可以看到 pinentry.exe 在下面运行服务帐户用户。为了使它工作,我终止任务并从调试模式调试一个示例文件,该文件将要求输入密码并发布甚至 sql 代理作业开始工作。但一旦我退出,同样的事情再次发生。
我尝试在脚本和进程任务中使用不带 --homedir 选项的命令,但相同的行为仍在继续。
谢谢
解决方案
下面是最终奏效的。
- 确保 gpg 代理会话处于活动状态。为此,我手动运行了一个解密包(调试模式)并输入了密码。
- 从 CMD(命令提示符)运行以下两个命令。gpg-agent.exe 允许-loopback-pinentry gpgconf –kill gpg-agent
- 我在从我的 SSIS 进程任务调用的批处理文件中使用以下命令。@echo OURPASSPHRASE|gpg.exe --batch --pinentry-mode=loopback --passphrase-fd 0 -d -o FILEPath\FileName.txt FilePath\FileName.txt.gpg
(以上所有操作都是使用我们用来运行 sql 作业的服务帐户完成的。)
参考以下链接 https://github.com/carlolars/gnupg2-msys2/issues/1
谢谢希望它有帮助。
推荐阅读
- c# - 动态反序列化一个 json 文件是一些单元格是空的并且得到一个无效的数组
- xml - 如何在不将整个 XML 保存在内存中的情况下从 XML 文件中消除空叶元素?
- php - Symfony3 将表单数据传递给集合内的集合
- android - 位于行尾时不显示包含空格的嵌套文本组件
- c# - 通过 odata.context Url 获取 Office 365 服务通信 API 的元数据
- php - 如何让 PHP 升级到更高版本的 Curl?
- sql-server - 快速加载错误输出不会重定向整个批次
- r - 循环向量(不循环向量中的元素)
- python - Keras 中预测数据的反比例
- php - str_replace 方法在 php 中不起作用