【问题标题】:Does AES_ENCRYPT cause problems with replication in Mysql?AES_ENCRYPT 是否会导致 Mysql 中的复制出现问题?
【发布时间】:2020-12-11 14:45:09
【问题描述】:

我有一个 Mysql 主-主复制对。 (我将第二个保持在只读模式以避免索引冲突。)

在我的主数据库上,我在错误日志中收到此消息:

语句不安全,因为它使用了可能返回的系统函数 从站上的不同值。语句:INSERT INTO field_data (fields_id,records_id,enc_data,field_units_type_key) 值 ('26','1753149',AES_ENCRYPT('COVID',UNHEX(SHA2('17531491796432333532720#',256))),'NULL')

AES_ENCRYPT 或 SHA2 是否以某种方式依赖于时间?为什么复制服务器上的这个插入不能保存完全相同的数据?

【问题讨论】:

    标签: mysql replication


    【解决方案1】:

    这是自 MySQL 5.6.17 以来AES_ENCRYPT 的记录行为:

    从 MySQL 5.6.17 开始,使用 AES_ENCRYPT() 或 AES_DECRYPT() 的语句对于基于语句的复制是不安全的,并且不能存储在查询缓存中。

    这不是因为时间依赖性,而是因为行为取决于新引入的系统变量block_encryption_mode

    此变量控制基于块的算法(例如 AES)的块加密模式。它会影响 AES_ENCRYPT() 和 AES_DECRYPT() 的加密。

    如果您的服务器上的设置不同,您的查询将插入不同的数据。如果它没有不同,那么你很好。但由于这是您的责任,您会收到警告说(基于语句的)复制无法确保它。

    【讨论】:

      猜你喜欢
      • 2012-03-16
      • 2015-04-09
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多