Mysql - 如何记录未授权主机的访问

Mysql - 如何记录未授权主机的访问

我有以下情况:

MySQL server:
IP: 192.168.0.1
user: testing
pass: testing123123

MySQL client #1:
IP: 192.168.0.2

MySQL client #2:
IP: 192.168.0.3

进入 MySQL 服务器:

GRANT ALL PRIVILEGES ON *.* TO testing@'192.168.0.2' IDENTIFIED BY 'testing123123';
flush privileges;

客户端 #1 被授予权限,而客户端 #2 未被授予权限。

然后在客户端#1 shell中:

mysql -h192.168.0.1 -uuser_bla_bla -pbla_bla_bla
ERROR 1045 (28000): Access denied for user 'user_bla_bla'@'192.168.0.2' (using password: YES)

进入Mysql Server日志:

2017-03-11 12:13:10 82588 [Warning] Access denied for user 'user_bla_bla'@'192.168.0.2' (using password: YES)

一切正常:用户名/密码错误>>访问被拒绝>>记录日志

现在客户端 #2 的 shell:

mysql -h192.168.0.1 -uuser_bla_bla -pbla_bla_bla
ERROR 1130 (HY000): Host '192.168.0.3' is not allowed to connect to this MySQL server

进入Mysql Server日志:没有什么!

我的my.cnf:

[mysqld]
log_warnings = 2
log_error=/var/log/mysql_error.log

MySQL 日志未记录“主机不允许”,它仅记录“拒绝用户访问”。

问题:如何记录 MySQL“主机不允许”的情况?

谢谢!

答案1

最近,我面临着需要找出 MySQL 5.7 服务器的不需要的登录尝试的来源,并发现了这个问题。因此,这里有一个可行的解决方案:

  1. 启用常规登录my.cnf
[mysqld]
general_log_file = /var/log/mysql/mysql-query.log
general_log = 1
  1. 重启 mysql
  2. 等待一段时间,查看收集到的数据:
grep -B 1 'Access denied' /var/log/mysql/mysql-query.log

你会看到类似

2022-05-13T19:33:27.278884Z         2 Connect   root@localhost on  using Socket
2022-05-13T19:33:27.278923Z         2 Connect   Access denied for user 'root'@'localhost' (using password: NO)
--
2022-05-13T19:34:02.517332Z        10 Connect   bad_user@bad-ip-addr on my_database using TCP/IP
2022-05-13T19:34:02.517392Z        10 Init DB   Access denied for user 'bad_user'@'%' to database 'my_database'
--

时间戳后带有数字(即 2、10)的列包含连接 ID,您可以轻松地将不需要的用户与其地址进行匹配。

请注意,保持general_log启用状态可能会导致磁盘空间消耗大,并可能降低性能

相关内容