[資料庫]MYSQL之授予/查驗binlog許可權

千千寰宇發表於2023-04-28
  • 在後端做主從備份;亦或是在大資料領域中,各類CDC同步(Canal / Flink CDC等),均會基於MYSQLbinlog來實現。
  • 因此,知道需要哪些許可權?怎麼查驗去、怎麼授權就很重要了。

感覺網上的文章沒成體系地清楚,而今天工作上處理問題的過程中遇到了此疑問,且曾多次對此產生疑問,自然便有了這一篇,作為個人的Momo備忘筆記~

  • 不知道什麼是資料領域CDC的朋友,可參見我剛參加工作,並進入大資料領域時的這篇科普文章~

1 MYSQL的binlog特性,需要使用者具備哪些許可權?

MySQL Binlog許可權需要3個許可權 :

  • SELECT
    • 缺乏SELECT許可權時,報錯為
      • com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Access denied for user 'canal'@'%' to database 'binlog'
    • 缺乏REPLICATION SLAVE許可權時,報錯為
      • java.io.IOException: Error When doing Register slave:ErrorPacket [errorNumber=1045, fieldCount=-1, message=Access denied for user 'canal'@'%'
    • 缺乏REPLICATION CLIENT許可權時,報錯為
      • com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation
  • REPLICATION SLAVE
  • REPLICATION CLIENT

Binlog為什麼需要這些許可權?

  • Select 許可權代表允許從表中檢視資料
  • Replication client 許可權代表允許執行show master status,show slave status,show binary logs命令
  • Replication slave 許可權代表允許slave主機透過此使用者連線master以便建立主從 複製關係

1 查驗:查驗指定使用者是否具有指定庫/指定表的binlog許可權

  • Step1 Check binlog status of mysql database server
-- https://github.com/alibaba/canal/wiki/AdminGuide
show variables like 'log_bin';
show variables like 'binlog_format';
[資料庫]MYSQL之授予/查驗binlog許可權
  • Step2 查驗指定使用者是否具有指定庫/指定表的binlog許可權
SHOW GRANTS FOR '{userName}'@'%';
[資料庫]MYSQL之授予/查驗binlog許可權

由圖可見,這顯然說明了該使用者對圖中這個庫有binlog許可權。

3 授予許可權

GRANT 
    SELECT
    , REPLICATION SLAVE
    , REPLICATION CLIENT 
ON *.*
TO '{username}'@'%' IDENTIFIED BY '{password}'; -- % 可替換為 指定的 host

X 參考與推薦文獻

Y 文末

  • 感覺有幫助的、有需要的夥伴,可點贊、收藏、轉發~
  • 歡迎評論、溝通~

相關文章