有没有办法审核 MySQL 的登录?我希望能够为每个员工创建一个用户名,从而创建一个登录审计跟踪。然而,谷歌搜索并没有出现好的结果。
我们能审计的越多越好。至少,很高兴知道谁何时登录。看看谁在什么时候执行了什么查询会更好。这些日志主要是为了告诉客户我们拥有它们,因为数据库中可能存在敏感信息。
显然,能够审计每个用户(以及何时)执行的查询也将使我们能够更好地确定谁是安全问题的原因,如果应该出现的话。
有没有办法审核 MySQL 的登录?我希望能够为每个员工创建一个用户名,从而创建一个登录审计跟踪。然而,谷歌搜索并没有出现好的结果。
我们能审计的越多越好。至少,很高兴知道谁何时登录。看看谁在什么时候执行了什么查询会更好。这些日志主要是为了告诉客户我们拥有它们,因为数据库中可能存在敏感信息。
显然,能够审计每个用户(以及何时)执行的查询也将使我们能够更好地确定谁是安全问题的原因,如果应该出现的话。
您可能希望使用通用查询日志。
安全日志记录的一件重要事情是攻击者无法访问日志以清除其存在的痕迹,因此请考虑仅附加文件。
在 Oracle 中的 FWIW 我们可以自动将日志发送到远程 syslog,但我不相信 MySQL 还具有此功能。也许你可以用 SNMP 伪造它,但我还没有尝试过。
@Gauis 的回答非常好。要进一步添加它,您可以执行以下操作:
MySQL 5.1 现在允许将一般日志和慢查询日志存储为 SQL 表。
将此添加到 /etc/my.cnf:
重启mysql
然后,当 mysqld 创建通用日志时,它会在 /var/lib/mysql/mysql 文件夹(mysql 模式数据库)中将表创建为 CSV 表,而不是文本文件。
只需执行此操作即可查看:
所有的连接都会堆积在里面。
对您来说,在查询它时这不是很有用。每次都只是一次全表扫描。
该怎么办 ???将其转换为 MyISAM 并索引表!!!!
或者,您可能希望在参数字段上放置全文索引。
我刚刚在服务器上设置了 MySQL 5.5.9 并进行了尝试。结果如下:
现在,您可以按时间戳查询并在参数字段中查找特定标记。
例如,请注意我所做的 SELECT 的第 4 行。我的登录记录在参数字段中为
[email protected] on
. 你可以追踪这些。如果将军变得太大怎么办(相信我它会很快变得太大)
该怎么办 ???
顺便说一句,一旦您将常规日志脱机,您就可以运行这些日志来收集在 mysqld 中执行某些操作的不同登录名:
我有一个带有 3 个数据库服务器的客户端。每个带有 DB Server 的服务器中都有超过 1,000,000,000(10 亿 [ 万 ])行。上面的脚本大约需要 2.5 小时才能完成。audit_user_host 表最终有 27 个不同的登录。
你应该很高兴。
玩得开心,大家!!!
无需手动执行很多操作,只需安装审核插件即可在用户级别提供更多洞察力
http://www.mysql.com/products/enterprise/audit.html
它可以在选定的商业 MySQL 版本上使用,如果任何 MySQL 分支也添加到社区版本中会很棒,这样大多数人都能从这个功能中受益,否则我们必须依赖 @RolandoMySQLDBA 提供的解决方案。
@statichippo
如何在 MySQL 上安装审计日志。
+ 审计日志仅支持 MySQL Enterprise
+ 您可以在 MySQL Community 上安装审计日志:
1. 复制文件 audit_log.so 您可以安装 MySQL Enterprise Trial,然后将文件 audit_log.so 复制到 MySQL Community。
2. 将 audit_log.so 复制到 plugin_dir 作为 /usr/lib64/mysql/plugin 或者您可以通过以下方式显示插件目录:
转到 mysql 控制台: mysql> show global variables like '%plugin%';
3. 安装审计日志为:
mysql> INSTALL PLUGIN audit_log SONAME 'audit_log.so';
mysql> SHOW VARIABLES LIKE 'audit_log%';
4.输出审计日志:
tail -f /var/lib/mysql/audit.log
非常感谢。