java - JKS 文件上的 SQL Server 2019 外部脚本执行身份验证错误

标签 java sql-server stored-procedures encryption keystore

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

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 环境中运行此程序,并已授予“Everyone”对 jks 的完整安全权限。
  • 我已经仔细检查了运行 sql server 的用户,并确保该用户对该文件也拥有完全权限。 (该用户还拥有 SQL Server 的管理员权限)
  • 我已检查 SQL Server sp_configure还有选项。
  • 文件流已在 sp_configure 中启用并设置为完全控制
  • 我什至在 sp_configure 上禁用了 clr strict security,看看是否是这个原因。我仍然收到同样的错误。
  • 我已尝试在我的用户目录(对 SQL Server 用户的目录和文件具有权限)、C 驱动器以及 C 驱动器的子目录(同样对 SQL Server 用户具有对目录和文件的权限)中使用 JKS 进行测试。 SQL Server 用户的目录和文件)

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

谁知道可能导致此错误的原因是什么?

最佳答案

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

关于java - JKS 文件上的 SQL Server 2019 外部脚本执行身份验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61963216/

相关文章:

sql-server - 我是否必须使用存储过程来获得查询级别的安全性,或者我仍然可以使用 Dynamic Sql 来做到这一点?

mysql - 遍历结果行并将列数据存储到存储过程变量mysql

mysql - 在循环中使用 mysql 准备好的语句在执行第一个循环/循环后会中断循环

Java file.setReadable(True) 不起作用,即使在管理员用户上也是如此?

java - 在windows下运行java程序

用于过滤 jtable 行的 Java swing 切换按钮

sql-server - 在 ssis 中导出到 csv 时包括前导零

java - 如何构建与数据库通信的 Controller

c# - 下载并执行 SQL 脚本——有哪些安全问题+解决方案?

sql-server - SQL 提升到错误 "An invalid floating point operation occurred."的幂