我们正在生产环境中使用Maria DB (v5.3,我相信)。
我们拥有的一个问题是,在所有连接到db的应用程序中都使用dev用户(该用户拥有完全的权限和权限)。我们已经开始制作特定于应用程序的用户,并将其替换为dev用户。
一旦我们替换了dev用户,计划就是将(dev)用户的权限/特权限制为只读。
我相信,我们现在已经将大多数应用程序用户从dev替换为他们的应用程序特定用户。但是,我不能百分之百地确定没有一个应用程序仍然在使用dev用户。
我的问题是,是否有sql或日志告诉我,在过去的一天/周/月中连接到数据库的w/的用户,等等?我如何从历史的角度来判断谁连接到数据库?
发布于 2014-01-17 20:10:43
您可以使用常规日志记录每个连接。
实际上,您可以将该信息记录到表中。
在mysql模式中,有一个名为general_log的表。下面是:
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` bigint(21) unsigned 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.01 sec)
mysql>当然,表使用CSV存储引擎。您可以将其更改为MyISAM并对其进行索引。事先复印一份表格:
use mysql
CREATE TABLE general_log_copy LIKE general_log;
ALTER TABLE general_log ENGINE=MyISAM;
ALTER TABLE general_log ADD INDEX (event_time);要激活它,就这样做
1)通过将这些行添加到my.cnf,将常规日志配置为记录到表中。
[mysqld]
general-log
log-output=TABLE 2)重新启动mysql
3)启动mysql并使用它一两天
4)通过运行以下查询查找dev用户
SELECT * FROM mysql.general_log WHERE user_host LIKE 'dev %';这将告诉您IP dev将在什么时间和什么时候到来。
5)在所有代码中查找dev用户
6)截断一般日志
SET @old_log_state = @@global.general_log;
SET GLOBAL general_log = 'OFF';
TRUNCATE TABLE mysql.general_log;
SET GLOBAL general_log = @old_log_state; 7)如果您确实发现“dev”用户偷偷进来,请等待24小时,然后返回到第4步。
当您删除步骤1中的行时,请禁用常规日志。
SET GLOBAL general_log = 'OFF'; 就这样!
请参阅我关于普通日志表版本的帖子:
Jan 28, 2013:来自特定用户或ip的mysql日志活动Feb 11, 2012:MySQL通用日志Nov 16, 2011:日志MySQL DB更改查询和用户我还使用了慢速日志来代替:如何做MySQL用户计费
发布于 2014-01-18 23:26:41
或者,您可以安装和部署Maria DB审计日志,以启用对所需对象的跟踪和访问。
https://dba.stackexchange.com/questions/57017
复制相似问题