【问题标题】:Getting encryption schema mismatch in mulesoft while inserting data in always encrypted mssql database在始终加密的 mssql 数据库中插入数据时,在 mulesoft 中获取加密架构不匹配
【发布时间】:2020-10-14 15:47:41
【问题描述】:

我正在开发 mule 3.8 社区版, 我只是想将数据插入到 mssql 数据库中,该数据库的表启用了“始终加密”。 我在 mulesoft 数据库连接器的执行 dll 选项下编写了参数化查询。 我还在 mule-app.properties 中的连接字符串中提到了“columnEncryptionSetting=Enabled”

执行代码后出现以下错误。

Message               : Encryption scheme mismatch for columns/variables '@deliveryheader_shiptotelephonenumber'. The encryption scheme for the columns/variables is (encryption_type = 'PLAINTEXT') and the expression near line '5' expects it to be (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'Column_data_encrypt', column_encryption_key_database_name = 'Encrypt_db') (or weaker).  (com.microsoft.sqlserver.jdbc.SQLServerException).
Payload               : {NullPayload}
Payload Type          : org.mule.transport.NullPayload
Element               : /encryptionpocFlow/processors/0 @ encryptionpoc:encryptionpoc.xml:20
Element XML           : <db:execute-ddl config-ref="db_Sql_Configuration" doc:name="Database">
                        <db:dynamic-query>DECLARE @deliveryheader_shiptotelephonenumber varchar(30)='1234567890' DECLARE @deliveryheader_shiptoaddress_address1 varchar(100)='3807 ABCDE XYZS PKWY'
DECLARE @deliveryheader_shiptoaddress_address2 varchar(100)='SUITE 102' DECLARE @deliveryheader_shiptoaddress_city varchar(60)='PQRSE'
DECLARE @deliveryheader_shiptoaddress_county varchar(60)='LMNOP'

INSERT INTO [dbo].[encrypted_table] (deliveryheader_shiptotelephonenumber ,deliveryheader_shiptoaddress_address1,deliveryheader_shiptoaddress_address2 ,deliveryheader_shiptoaddress_city,deliveryheader_shiptoaddress_county) VALUES(@deliveryheader_shiptotelephonenumber,@deliveryheader_shiptoaddress_address1 ,@deliveryheader_shiptoaddress_address2,@deliveryheader_shiptoaddress_city ,@deliveryheader_shiptoaddress_county)</db:dynamic-query>
                        </db:execute-ddl>
--------------------------------------------------------------------------------
Root Exception stack trace:
com.microsoft.sqlserver.jdbc.SQLServerException: Encryption scheme mismatch for columns/variables '@deliveryheader_shiptotelephonenumber'. The encryption scheme for the columns/variables is (encryption_type = 'PLAINTEXT') and the expression near line '5' expects it to be (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'Column_data_encrypt', column_encryption_key_database_name = 'Encrypt_db') (or weaker). 
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:258)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1535)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:845)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:752)....

如果我缺少任何东西或需要任何更改,请帮助我。

【问题讨论】:

    标签: sql-server encryption mulesoft always-encrypted


    【解决方案1】:

    这是从 MS SQL 返回的错误。我不确定 @DECLARE 语句在来自 Mule 数据库连接器的查询中是否有效。尝试删除它们并直接从 Mule 有效负载/变量中传递值。

    【讨论】:

    • 嗨@aled 我已经按照你的建议尝试过,我已经在我的流程中创建了变量,这些变量有数据要插入到表中,但我再次收到错误消息:操作数类型冲突:varchar 与varchar(8000) 使用 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'Column_data_encrypt', column_encryption_key_database_name = 'Encrypt_db') collat​​ion_name = 'SQL_Latin1_General_CP1_CI_AS' (com.microsoft.c.sqlserver) 加密。有效载荷:{NullPayload} 请帮忙。
    • 看起来像docs.microsoft.com/en-us/sql/connect/jdbc/…的文档中提到的错误
    • 嗨@aled 根据您共享的链接中建议的解决方案,我更新了我的代码以检查数据是否会插入,但我得到的错误相同:操作数类型冲突:varchar 不兼容varchar(8000) 用 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'Column_data_encrypt', column_encryption_key_database_name = 'Encrypt_db') collat​​ion_name = 'SQL_Latin1_General_CP1_CI_AS' (com.microsoft.sqlserverException).c.sqlserver有效负载:{NullPayload} 请帮助我。
    • 也以另一种方式,我将查询类型更改为在 mule 中参数化,因此之后我收到错误消息:无法解密列加密密钥。无效的密钥存储提供程序名称:MSSQL_CERTIFICATE_STORE。密钥存储提供程序名称必须表示系统密钥存储提供程序或已注册的自定义密钥存储提供程序。有效(当前已注册)自定义密钥存储提供程序名称为:null。请验证数据库中列主密钥定义中的密钥存储提供程序信息,并验证您的应用程序中使用的所有自定义密钥存储提供程序都已注册@aled 你能帮忙吗
    猜你喜欢
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 2017-06-04
    • 1970-01-01
    相关资源
    最近更新 更多