##
如何在MySQL主从复制中安全存储复制用户和密码
1、问题
今天处理一个客户的 MySQL主从复制问题,他提到使用show replica status\G查看主从复制状态时,会看到复制用户和密码,觉得不安全,询问是否有方法可以解决。
2、解决方案
2.1、基础知识
默认情况下,如果指定复制凭据为CHANGE REPLICATION SOURCE命令的一部分,则在复制信息存储库中可见。当使用该CHANGE REPLICATION SOURCE命令指定复制用户凭据时,无论选项如何,它们都会以未加密的纯文本形式存储在master_info_repository。如果希望隐藏它们,防止未经授权的用户偶尔访问,则需要使用START REPLICA命令中的 USER和 PASSWORD 选项。
2.2、实战
以下操作都在从库上完成
因此,如果master_info_repository 设置TABLE为8.0版以来的默认值,则任何对mysql 数据库具有读取访问权限的用户都可以查询表slave_master_info并读取密码.
root@localhost [db01] (07:22:31) >select User_name,User_password from mysql.slave_master_info;
+-----------+---------------+
| User_name | User_password |
+-----------+---------------+
| repuser | reppassword |
+-----------+---------------+
1 row in set (0.00 sec)
或者,如果master_info_repository 设置为FILE,则任何可以访问该文件(默认情况下位于 MySQL数据目录中)的操作系统用户都可以获得复制凭据:
stop replica;
set persist master_info_repository=file;
start replica;
系统中检查结果
cd /mysql/data/ [root@db02 data]# head -6 master.info 33 mydb-binlog.000010 1085 192.168.5.130 repuser repuser123
如果不希望复制凭据在源信息存储库中可见,您可以将复制凭据指定为 START REPLICA或START GROUP_REPLICATION命令的一部分:
这里把master_info_repository='table’设置为表来进行演示
set persist master_info_repository='table';
root@localhost [(none)] (07:33:30) >start replica user='repuser' password='repuser123';
Query OK, 0 rows affected, 1 warning (0.01 sec)
root@localhost [(none)] (07:34:18) >show warnings;
+-------+------+------------------------------------------------------------------------+
| Level | Code | Message |
+-------+------+------------------------------------------------------------------------+
| Note | 1759 | Sending passwords in plain text without SSL/TLS is extremely insecure. |
+-------+------+------------------------------------------------------------------------+
1 row in set (0.00 sec)
root@localhost [(none)] (07:34:23) >select User_name,User_password from mysql.slave_master_info;
+-----------+---------------+
| User_name | User_password |
+-----------+---------------+
| repuser | reppassword |
+-----------+---------------+
1 row in set (0.01 sec)
这里还能看到用户名和密码。是因为之前的配置还在。处理方法如下:
root@localhost [(none)] (07:35:10) >stop replica;
Query OK, 0 rows affected (0.01 sec)
root@localhost [(none)] (07:35:22) >change replication source to source_user='',source_password='';
Query OK, 0 rows affected, 2 warnings (0.03 sec)
root@localhost [(none)] (07:35:58) >start replica user='repuser' password='reppassword';
Query OK, 0 rows affected, 1 warning (0.01 sec)
root@localhost [(none)] (07:36:09) >\P grep Running;
PAGER set to 'grep Running;'
root@localhost [(none)] (07:36:23) >show replica status\G
Replica_IO_Running: Yes
Replica_SQL_Running: Yes
Replica_SQL_Running_State: Replica has read all relay log; waiting for more updates
1 row in set (0.01 sec)
root@localhost [(none)] (07:36:35) >nopager
PAGER set to stdout
root@localhost [(none)] (07:36:42) >select User_name,User_password from mysql.slave_master_info;
+-----------+---------------+
| User_name | User_password |
+-----------+---------------+
| | |
+-----------+---------------+
1 row in set (0.00 sec)
3、备注
从源信息存储库中清楚复制凭据后,他们不会存储在任何地方,并且每次重新启动复制时都需要提供他们,即:
start replica user='repuser' password='reppassword';

最后修改时间:2023-08-10 09:58:01
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




