如何在MySQL主从复制中安全存储复制用户和密码
##
如何在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';
免责声明:
1、本站资源由自动抓取工具收集整理于网络。
2、本站不承担由于内容的合法性及真实性所引起的一切争议和法律责任。
3、电子书、小说等仅供网友预览使用,书籍版权归作者或出版社所有。
4、如作者、出版社认为资源涉及侵权,请联系本站,本站将在收到通知书后尽快删除您认为侵权的作品。
5、如果您喜欢本资源,请您支持作者,购买正版内容。
6、资源失效,请下方留言,欢迎分享资源链接
文章评论