MariaDB Dump 文件兼容性变更

MariaDB 和 MySQL 都已经存在很长时间了,在维护兼容性的同时解决出现的安全问题,这之间总是存在难以平衡的关系。在 MariaDB 最新的错误修复版本中,我们不得不稍微打破兼容性以提高安全性,但也有一些变通方法。我们认为应该解释一下背后的原因,以及如何让您尽可能轻松地应对。

问题所在

我们正在解决的问题(由于各种原因,我们必须非常迅速地处理)是,可以生成恶意的 MariaDB dump 文件,这些文件可能从 MariaDB 客户端执行 shell 命令。防止这项工作详细记录在 MDEV-21178 中,它本质上归结为一个新的“沙盒模式”,该模式用于在 MariaDB 客户端中禁用系统命令。

MariaDB 客户端现在有一个选项 --sandbox 或 MariaDB 客户端提示符命令 \-。这会在会话的其余时间启用沙盒模式,直到断开连接。进入沙盒模式后,任何可能在 shell 上执行操作的命令都会被禁用。

问题的第二部分是对 mariadb-dump 的一个小补丁,该补丁在 dump 文件最顶部(以注释形式)添加一个命令,以触发沙盒模式。它看起来像这样:

/*!999999\- enable the sandbox mode */

MariaDB 和 MySQL 客户端会将此行精简为反斜杠和短划线,然后尝试执行带短划线的内部命令。问题就出在这里。

较旧版本的 MariaDB 客户端和所有版本的 MySQL 客户端都不理解此命令,它们会因此报错。兼容性问题就出在这里。

如果您从新的 MariaDB 客户端版本导入 dump 文件到尚未应用此修复的版本(所有受支持版本的最新版本都将获得此修复),或导入到任何版本的 MySQL,该行都会报错。其他导入到 MariaDB Server 的方法,例如使用编程语言的数据库连接器,将没有问题。

受影响的版本

此更改正在发生或已经发生在 MariaDB 10.5.25, 10.6.18, 10.11.8, 11.0.6, 11.1.5, 11.2.4 和 11.4.2 版本中。因此,如果您从这些版本中导出 dump 文件并尝试将其导入到不受支持的版本(例如 10.4)或较旧的错误修复版本(例如 10.5.24),您就会遇到此问题。

变通方法

幸运的是,您有很多方法可以避免此问题,特别是如果您希望从 MariaDB 导出并导入到较旧版本或 MySQL 中。它们是:

  • 推荐:使用已应用此更改的 MariaDB Server 版本的安全客户端导入 dump 文件。
  • 使用较旧的(不安全的)mariadb-dump 版本进行备份。
  • 在备份时使用类似 mariadb-dump|tail +2 的命令移除该行。
  • 在导入时使用类似 tail +2|mariadb 的命令移除该行。

通过这些信息,如果您遇到此问题,应该能够找到适合您环境的解决方案。

特色图片:由 Twm 提供的 compatibility,使用 CC BY-NC-ND 许可证。

发布者:Andrew Hutchings

MariaDB Foundation 首席贡献官