【发布时间】: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