我有mysql服务器。
服务器由我的应用程序和外部审计员(使用 mysql 工作台的人)访问。审核员拥有特定的用户和密码以及专用 IP,并且仅授予选择权限。
我需要记录审计员的活动。有没有可能以某种方式做到这一点?如果没有,我可以记录来自网络的包吗?
您可以使用一般日志。实际上,您应该尝试使用通用日志的MySQL表版本。
如果你运行这个:
SHOW CREATE TABLE mysql.general_log\G
Run Code Online (Sandbox Code Playgroud)
您应该会看到如下内容:
mysql> show create table mysql.general_log\G
*************************** 1. row ***************************
Table: general_log
Create Table: CREATE TABLE `general_log` (
`event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`user_host` mediumtext NOT NULL,
`thread_id` int(11) NOT NULL,
`server_id` int(10) unsigned NOT NULL,
`command_type` varchar(64) NOT NULL,
`argument` mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'
1 row in set (0.14 sec)
mysql>
Run Code Online (Sandbox Code Playgroud)
该user_host
列将记录 MySQL 用户和命令来自的 IP 地址/DNS 名称。
您现在可能会说,“该表是一个 CSV 文件。我必须解析它。” 这是真的,你必须这样做。但是,您知道可以将其转换为 MyISAM 表吗?我实际上已经为我雇主的一个数据库托管客户尝试过这个,我写了一篇解释它的Feb 24, 2011
帖子(见下面的帖子)。
以下是基本步骤:
将 mysql.general_log 表设为 MyISAM
运行以下命令:
CREATE TABLE mysql.general_log_original LIKE mysql.general_log;
ALTER TABLE mysql.general_log ENGINE=MyISAM;
ALTER TABLE mysql.general_log ADD INDEX (event_time);
Run Code Online (Sandbox Code Playgroud)启用通用日志
将以下内容添加到 /etc/my.cnf
[mysqld]
log-output=TABLE
general-log
Run Code Online (Sandbox Code Playgroud)
如果您还需要通用日志的文本版本,请添加以下内容:
[mysqld]
log-output=TABLE,FILE
general-log
general-log-file=/var/log/mysql_general.log
Run Code Online (Sandbox Code Playgroud)重启mysql
只需运行 service mysql restart
我有很多关于使用通用日志和慢日志作为 MyISAM 表的帖子:
Jan 22, 2013
:slow_log 表在 MySQL 中多久更新一次?Nov 10, 2012
: 将 MySQL 错误和慢速日志重定向到另一个数据库Jan 08, 2012
:如何启用MySQL通用日志?Dec 27, 2011
:如何做 MySQL 用户记账Nov 18, 2011
:在 MySQL 中创建自定义日志表Jun 30, 2011
:如何将 MySQL 日志输出到 syslog?Feb 24, 2011
:审计 MySQL 数据库上的登录MySQL 5.5.28 最近引入了审计日志插件以及如何安装它。
以下是选项
这些对我来说是新的,所以我目前对审计日志插件没有任何优点或缺点。
归档时间: |
|
查看次数: |
44964 次 |
最近记录: |