【问题标题】:SQL Server - Unsupported Keystore Provider MSSQL_JAVA_KEYSTORESQL Server - 不支持的密钥库提供程序 MSSQL_JAVA_KEYSTORE
【发布时间】:2020-08-28 21:39:13
【问题描述】:

我正在开展一个项目,我们计划使用 SQL Server Always Encrypted 来加密我们的 SQL Server 2016 数据库。客户端应用程序将通过兼容的 jdbc 驱动程序访问数据。

Microsoft 文档说我可以使用 MSSQL_JAVA_KEYSTORE 作为 Keystore 提供程序。

  • 第 1 步:我使用 keytool 命令创建了一个 KeyPair,并且我有一个 jks 文件。

  • 第 2 步:我使用 SSMS 在 SQL Server 中创建了一个列主键,如下所示

    CREATE COLUMN MASTER KEY CMK_2
    WITH
        (KEY_STORE_PROVIDER_NAME = N'MSSQL_JAVA_KEYSTORE',
         KEY_PATH = N'tp-7b679880-706e-47af-bcbe-e1cc3cc78690');
    

    其中KEY_PATH 是我的keystore.jks 文件中密钥的别名。

  • 第 3 步:现在我正在尝试使用 SSMS 向导创建列加密密钥,它会引发以下错误

    不支持的密钥库提供程序类型:MSSQL_JAVA_KEYSTORE。

对该错误有点困惑 - 根据 Microsoft 文档,MSSQL_JAVA_KEYSTORE 是内置列主密钥库提供程序之一。

我做错了什么?

【问题讨论】:

  • 我认为 lptr 链接的要点是:注意:内置 SQL Server 管理 Studio 功能无法为 Java 密钥库创建列主密钥定义。 T-SQL 命令必须以编程方式使用。 换句话说,您需要从其 JDBC 连接字符串具有正确 columnEncryptionSetting、keyStoreAuthentication、keyStoreLocation 和 keyStoreSecret 属性的 Java 应用程序中执行此操作。
  • 谢谢你们指出这一点。我在阅读时忽略了那部分。有没有人尝试过或知道有人这样做过?
  • 关于混合 Microsoft Cert Store - Java Key Store 用例的任何新见解?

标签: sql-server always-encrypted


【解决方案1】:

很遗憾,无法直接使用 SSMS 创建 ECK。我希望将来微软可以处理这个问题。我使用 JBoss EAP 7.x 将 AE 与 Java 应用程序一起使用,步骤如下:

  • Keytool 创建密钥。
  • 按照 Microsoft SQL 指南的指南创建一个 java 类并使用它进行 EMK 和 ECK。
  • 创建引用此 ECK 的数据库表对象。
  • 在 jdbc 中,告知密钥库、其密码和与 sql server 的连接属性。

重要:

  • MSSQL 将无法处理数据库中的加密数据寄存器。它无法读取密钥库。
  • 您需要创建另一个具有相同密钥库访问权限的类或 Java 应用,以便能够处理数据 (CRUD) 操作并对数据库中的寄存器进行故障排除。
  • 如果此 AE 密钥库暴露,您的所有数据都可能存在风险,请妥善保管。

提示:使用 DBeaver 和 Squirrel,我可以使用密钥库进行一些选择命令,并正常进行更改和表结构。但是插入、更新不行,只能使用java类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    相关资源
    最近更新 更多