MS SQL Server 始终使用安全飞地与 JDBC 集成进行加密

问题描述 投票:0回答:1

我一直在绞尽脑汁地想通过使用安全飞地和 JDBC 的 ms sql server Always Encryption 来集成类似的操作

我在表(学生)上有一个使用随机加密的加密列(名称),并且能够使用 SSMS 使用以下查询来获取解密的数据

声明 @name char(200) = 'stack%'; 从学生中选择姓名、科目,其中姓名类似于@姓名;

要执行上述脚本,我已启用“始终加密”并将“启用安全飞地”和“飞地证明协议”设置为“无”

[![证明][1]][1]

还添加了列加密设置=已启用

[![列加密设置][2]][2]

我正在使用 JDBC 应用程序连接到加密数据库

连接字符串:jdbc:sqlserver://server:port;databaseName=database;SelectMethod=cursor;columnEncryptionSetting=Enabled;enclaveAttestationUrl=null;enclaveAttestationProtocol=NONE

下面是获取数据的代码

        
        String sql = "DECLARE @name char(200) = 'stack%'; "
                    + "SELECT name FROM Student WHERE name LIKE @name;";
        DatabaseManager db = null;
        ResultSet rs = null;
        List list = new ArrayList();
        try {
            db = getDatabaseManager();
            rs = db.executeQuery(sql);
        
            while (rs.next()) {
                System.out.println(rs.getString("CustomerName_1"));
            }

        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        } finally {
            if (db != null) {
                db.close();
                db = null;
            }
        }
    ````

But when running the application, I am unable to get the data and encountering the below exception

***Encryption scheme mismatch for columns/variables '@CustomerName_1'. The encryption scheme for the columns/variables is (encryption_type = 'PLAINTEXT') and the expression near line '1' expects it to be Randomized, , a BIN2 collation for string data types, and an enclave-enabled column encryption key, or PLAINTEXT.***

It is killing my time almost and any help would be appreciable and helpful 


  [1]: https://i.sstatic.net/W83djZwX.png
  [2]: https://i.sstatic.net/BHg0cCkz.png
sql-server encryption jdbc
1个回答
0
投票

您误解了加密的工作原理。查询必须在“外部”进行参数化,但您将整个查询传递到 SQL Server,它不再能够访问加密密钥。

您需要使用:PreparedStatement 并将 @name 变量作为参数发送(如果 SSMS 正在做什么)。您的 java 代码需要能够访问 enclave。请参阅https://learn.microsoft.com/en-us/sql/connect/jdbc/using-always-encrypted-with-secure-enclaves-with-the-jdbc-driver?view=sql-server-ver16

© www.soinside.com 2019 - 2024. All rights reserved.