將MySQL複製限制爲基於行的事件

做者:Pedro Gomes 譯:徐軼韜mysql

在MySQL 8.0.18上進行的後續工做中,咱們引入了對從服務器的放線程進行權限檢查功能,在本文中,咱們將介紹一項新功能,能夠進一步提升安全複製數據的能力,用戶能夠將複製流限制爲僅基於行的事件。sql

在MySQL 8.0.19中,爲複製通道添加了新的CHANGE MASTER參數REQUIRE_ROW_FORMAT,這使該通道僅接受基於行的複製事件。安全

此要求將經過如下方式提升總體安全性:服務器

  • 不容許複製LOAD DATA指令,由於它們意味着文件將暫時存在於磁盤上,未知用戶能夠對文件進行篡改或訪問以顯示在插入時將被加密的數據。微信

  • 不容許複製臨時表和相關數據,由於有可能在主數據中包含敏感的臨時數據,例如,用於計算的未加密數據將生成加密數據。測試

  • 避免出現基於語句的複製流相關的其餘常見問題加密

從安全邊界之外的服務器進行復制時,上面這些用例變得更加相關,這意味着它們不在用戶的控制範圍內,而且可能被未知用戶訪問。它在扇入用例中很是有用,例如,當想要聚合多個源中的數據,而且仍然但願確保磁盤上沒有未加密的敏感數據,或經過臨時表錯誤地複製了這些數據。spa

對於已經使用受限權限進行復制的用戶來講,好處是再也不須要向用戶授予FILE權限.net

行爲

在複製通道中啓用這個新功能以後,對於接收和回放的全部事務,將進行檢查,不容許如下任何一項:線程

  • LOAD DATA 事件

  • 臨時表的建立或刪除

  • 大多數INTVARRANDUSER_VAR與基於語句的複製相關聯的事件)

  • 爲基於語句複製使用而記錄的全部數據操做查詢(DML)

一旦遇到任何這些事件,複製將失敗並中止。

配置

要明確地使通道僅接受基於行的複製,必須徹底中止複製。下面是實現它的命令:

必須中止從服務器而不是中止其回放線程的緣由是,這些檢查都是在從服務器的接收線程和放線程中進行的,所以它們也適用於已經接收到並存在於中繼日誌中的事務。

可觀察性

Performance Schema表已經進行加強,以顯示新的CHANGE MASTER TO…語句選項REQUIRE_ROW_FORMAT的狀態

對mysqlbinlog的更改

爲了補充此更改,咱們還爲mysqlbinlog添加了新選項。

有了這個選項,用戶可以知道輸出對於運行REQUIRE_ROW_FORMAT = 1的通道是有效的
該選項還能夠防止mysqlbinlog打印與內部變量pseudo_thread_id相關的指令。若是配置了權限檢查,則僅在基於行的流上不須要這些權限,它們將須要複製回放線程中的額外權限

摘要

爲了保護您的服務器免受基於語句的複製流及其中容許的事件常見的問題,或者只是減小在副本中配置回放程序權限檢查所需的權限,REQUIRE_ROW_FORMAT是MySQL服務器的一項有益的功能。

咱們但願這項新功能將使用戶可以使用MySQL服務器建立更安全的解決方案。歡迎進行測試,並告訴咱們您的意見。


本文分享自微信公衆號 - MySQL解決方案工程師(mysqlse)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索