在我们的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的数据,然后是一般查询日志。
我自己没有用过,但听起来很有用。