SQL Server-不支持的密钥库提供程序MSSQL_JAVA_KEYSTORE

问题描述

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

Microsoft文档说我可以将MSsql_JAVA_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是内置的列主密钥库提供程序之一。

我在做什么错了?

解决方法

不幸的是,无法直接使用SSMS创建ECK。我希望将来微软能够解决这个问题。通过以下步骤,我已使用JBoss EAP 7.x将AE与Java应用程序结合使用:

  • 用于创建密钥的密钥工具。
  • 按照Microsoft SQL指南创建一个Java类,并在它之后进行EMK和ECK。
  • 创建引用此ECK的数据库表对象。
  • 在jdbc中,将密钥库及其密码和连接属性告知sql服务器。

重要:

  • MSSQL将无法处理数据库内部的crypt数据寄存器。它无法读取密钥库。
  • 您将需要创建另一个具有相同密钥库访问权限的类或Java应用程序,以便能够处理数据(CRUD)操作并对数据库中的寄存器进行故障排除。
  • 如果此AE密钥库公开,则所有数据可能都处于危险之中,请保持安全。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...