【问题标题】:SQL Server 2019 External Script Execution Authentication Error on JKS FileJKS 文件上的 SQL Server 2019 外部脚本执行验证错误
【发布时间】:2020-09-09 18:40:09
【问题描述】:

我正在尝试组合一个利用 SQL Server 2019 可扩展性框架和外部语言功能的 POC。这允许在 SQL Server 存储过程中执行外部语言。我编写了一个 JAR 文件,用于加密和解密通过 SQL Server 存储过程传递的数据。我已经确认每个方法都是正确的,并且在不作为存储过程发送时返回正确的值。但是,在执行存储过程时,我收到一个空数据集,并在调试模式下看到以下错误:

java.io.FileNotFoundException: <jks-file-location> (Access is denied)

抛出错误的Java代码行如下:

       Key _key = readKeyFromStore_cbs("<jks-file-location>, "<password>".toCharArray(), "entityEncryption", "<password>".toCharArray());
       _keySpec = new SecretKeySpec(_key.getEncoded(), _key.getAlgorithm());

再次,代码很好,我认为那里没有问题,并且不认为发布这些方法的内容是问题(SP 本身运行良好,使用虚拟数据代替数据被加密并解密,加解密的代码在单独运行时按预期运行)。

附加信息:

  • 我在本地 Windows 10 环境中运行它,并已授予“所有人”对 jks 的完全安全权限。
  • 我已经仔细检查了运行 sql server 的用户,并确保该用户也拥有该文件的完全权限。 (此用户还拥有 SQL Server 的管理员权限)
  • 我也检查了 SQL Server sp_configure 选项。
  • 文件流已启用并在 sp_configure 中设置为完全控制
  • 我什至在 sp_configure 上禁用了 clr strict security,看看是否是因为这个原因。我仍然收到同样的错误。
  • 我尝试在我的用户目录(对 SQL Server 用户的目录和文件具有权限)、C 驱动器和 C 驱动器的子目录(同样,对SQL Server 用户的目录和文件)

存储过程运行,但返回一个空数据集。当尝试不加密运行(使用当前无法访问的密钥库中的密钥)并使用虚拟数据时,我收到了预期的数据集。

任何人都知道可能导致此错误的原因吗?

【问题讨论】:

    标签: java sql-server stored-procedures encryption keystore


    【解决方案1】:

    更新: 将 JAR 和 jks 移动到 SQL Server 目录并启动 Launchpad 服务解决了该问题。希望这可以帮助人们避免类似的挫败感。

    【讨论】:

      猜你喜欢
      • 2015-11-13
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多