loggingMySQLlogin尝试

在我们的MySQL生产服务器(MySQL仪表板提醒我们)中,有时login尝试失败。 有没有办法logging每一个成功和失败的login到MySQL服务器,而不启用general_log

我们认为general_log不是一个选项,因为它是一个高负载的生产服务器。

只是为了通知这个好奇的人:挖掘你的错误日志和presto!

(1)。 编辑my.cnf(设置文档在这里find)

的[mysqld]

:#input错误日志文件的名称。 否则,将使用默认名称。

log_error = / var / log / mysql / error

:#defaults为1.如果值大于1,新连接尝试的中止连接和拒绝访问错误将写入错误日志

log_warnings = 2

(2)。 在命令运行

$ sudo cat /var/log/mysql/error.err | egrep'[aA] ccess denied'

(3)。 你有它!

(4)。 如果您需要限制用户(在多用户数据库中的dos攻击或mysql用户密码恢复尝试),那么( http://dev.mysql.com/doc/refman/5.5/en/user-resources.html

MySQL>授予使用*。 *到'攻击者'@'localhost'WITH MAX_CONNECTIONS_PER_HOUR 100;

限制每小时只能恢复100次密码尝试。

嗨,我不认为这是可能的。

从MySQL 5.1.29开始 – 您可以指定存储选项(表或文件)和位置以及您想要的日志 – 错误,一般,二进制或慢速查询。 据我所知 – 你不能指定日志的格式或logging。 我可能是错的 – 但我认为所有login尝试将被logging在通用日志中,而不是错误之一。

但是,假设你的mysql服务器运行在一个单独的机器上,从你的应用程序服务器上运行,并且你需要打开3306端口(或其他),你不能使用ssh隧道,你的mysql服务器仍然不应该被任何人访问,愿意不愿意。 我强烈build议不要将它暴露给networkingstream量,如果你必须(例如在不在防火墙后面的某个地方)将它绑定到你的应用服务器的IP地址或IP块,你的pipe理员访问IP(你在哪里访问)

希望有所帮助。

我认为通用日志可能会logging所有login尝试(成功和失败)之间的很多其他事情。 主要的问题是一般的日志会影响你的数据库的性能。 您可以打开查询的一般日志

 SET GLOBAL general_log = 'on' 

为更新版本的MySQL。

如果有问题的服务器应该没有configuration的外部连接,那么我担心会对您的应用服务器造成某种攻击,除非失败的login是在用户/密码configuration之前推出的新应用。

如果服务器在某种程度上暴露在3306的外部连接上,除非这是故意和需要的,否则我将设置configuration为Nick,并且使用iptables将stream量限制为仅来自应用服务器的3306。

http://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/中 ,作者展示了一种使用tcpdump捕获数据包的方法,并根据string过滤输出。

这可以解决你对general_log和performance的担忧,尽pipetcpdump本身可能会造成一些小的性能损失。 该解决scheme还将logging较less的数据,然后是一般查询日志。

我自己没有用过,但听起来很有用。