GreatSQL社区

搜索

chongzh

Mysql 不开general log与audit log ,如何跟踪用户与数据库的连接记录 ...

chongzh 已有 428 次阅读2023-9-18 23:39 |个人分类:Mysql 原理|系统分类:运维实战

如何创建一个简单的审计,检查哪些数据库用户已经成功连接到数据库。

MySQL提供了一个名为init_connect的全局变量,每次用户成功连接到正在运行的数据库服务器的模式时,都会执行这个变量。如果在下面的示例中,连接用户没有执行由变量定义的代码的权限,连接将被终止。因为init_connect是一个全局变量,所以无法排除一部分用户(SUPER或CONNECTION_ADMIN权限的用户不执行init_connect)执行init _ connect中的代码。init_connect选项不影响拥有SUPER或CONNECTION_ADMIN权限的用户,但是该选项对于应用程序用户来说已经足够了。

create database audit;

CREATE TABLE if not exists audit.logon_log (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
 connection_id INT UNSIGNED NOT NULL,
  login_ts TIMESTAMP NOT NULL,
  `schema` VARCHAR(64) NULL,
  user VARCHAR(77) NOT NULL,
  PRIMARY KEY (id)
);

然后,我们创建一个在事件发生时应该执行的过程:

DROP PROCEDURE audit.logon_trigger;

DELIMITER //
CREATE PROCEDURE audit.logon_trigger( IN dbase varchar(64))
SQL SECURITY DEFINER
BEGIN
INSERT INTO audit.logon_log (connection_id, login_ts, `schema`, user)
       VALUES (CONNECTION_ID(), CURRENT_TIMESTAMP(), dbase , SESSION_USER());
END;
//
DELIMITER ;

然后,您需要设置init_connect全局参数,以便在用户连接时运行

set global init_connect = "CALL audit.logon_trigger(schema())";

这样做的缺点是,您需要授予数据库中的每个用户对这个过程的执行权限..这个shell oneliner应该为当前数据库中的所有用户提供构造权限。

mysql -uroot -p<pass> -s -Dmysql -e"select user,host from user" | awk '{print "grant execute on PROCEDURE audit.logon_trigger to ""\x27"$1"\x27""@""\x27"$2"\x27""\x3b"}'; > /tmp/grants.sql

赋权脚本,您应该会看到如下所示的输出...

grant execute on PROCEDURE audit.logon_trigger to 'xxx'@'localhost';

作为数据库的特权用户,您应该运行以下命令,这将使数据库的所有用户都有特权执行该过程

source /tmp/grants.sql

以验证它是可操作的。以标准用户之一的身份登录,然后验证审计数据库是否被正确填充。

(Mon Sep 18 23:19:07 2023)[root@GreatSQL][(none)]>select * from audit.logon_log;
+----+---------------+---------------------+--------+--------------------+
| id | connection_id | login_ts            | schema | user               |
+----+---------------+---------------------+--------+--------------------+
|  1 |       2505034 | 2023-09-18 23:19:02 | NULL   | andy@172.26.170.13 |
|  2 |       2505310 | 2023-09-18 23:19:27 | andy   | andy@172.26.170.13 |
+----+---------------+---------------------+--------+--------------------+
2 rows in set (0.00 sec)





评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2024-6-18 22:54 , Processed in 0.012878 second(s), 8 queries , Redis On.
返回顶部