mysql利用init-connect初始化实现连接到实例

  

mysql的连接首先都是要通过init-connect初始化,然后连接到实例。

我们利用这一点,通过在init-connect的时候记录下用户的thread_id,用户名和用户地址实现db的访问审计功能。

<>强实现步骤

为了不与业务的库冲突,单独创建自己的库:

<代码类=皊ql平原”> #建库表代码代码 <代码类=" sql关键字">创建,<代码类=" sql关键字">数据库代码,<代码类=" sql平原"> db_monitor; <代码类=皊ql平原”>使用db_monitor; <代码类=" sql关键字">创建,<代码类=" sql关键字">表,<代码类=皊ql平原”> accesslog <代码类=皊ql平原”> (thread_id  <代码类=" sql关键字"> int <代码类=皊ql平原”>(11), <代码类=" sql关键字">默认,<代码类=" sql color1 ">空 <代码类=皊ql平原”>,,#进程id <代码类=皊ql空间”>, <代码类=皊ql平原”> log_time datetime  <代码类=" sql关键字">默认,<代码类=" sql color1 ">空 <代码类=皊ql平原”>,,#登录时间 <代码类=皊ql空间”>, <代码类=皊ql平原”> localname  <代码类=" sql关键字"> varchar <代码类=皊ql平原”>(50), <代码类=" sql关键字">默认,<代码类=" sql color1 ">空 <代码类=皊ql平原”>,#登录名称,带详细ip  <代码类=皊ql空间”>, <代码类=皊ql平原”> matchname  <代码类=" sql关键字"> varchar <代码类=皊ql平原”>(50), <代码类=" sql关键字">默认,<代码类=" sql color1 ">空 <代码类=皊ql平原”>,#登录用户 <代码类=皊ql空间”>, <代码类=" sql关键字">键,<代码类=" sql平原"> idx_log_time (log_time) <代码类=" sql平原">)引擎=InnoDB  <代码类=" sql关键字">默认,<代码类=" sql平原"> CHARSET=utf8;


这个参数是可以动态调整的,也注意要加到配置文中件my . cnf中所做,否则下次重启后就失效了。

<代码类=皊ql平原”> mysql>显示变量 <代码类=" sql color1 ">像 <代码类=" sql字符串"> & # 39;init_connect % & # 39; <代码类=皊ql平原”>;<代码>/<代码类=" sql平原”> + <代码类=" sql注释"> - - - - - - - - - - - - - - - - - - - - - - - - - + + <代码类=皊ql平原”> | Variable_name | |值 <代码类=皊ql平原”> + <代码类=" sql注释"> - - - - - - - - - - - - - - - - - - - - - - - - - + + <代码类=皊ql平原”> | init_connect |,,,| <代码类=" sql平原”> + <代码类=" sql注释"> - - - - - - - - - - - - - - - - - - - - - - - - - + +代码 <代码类=" sql平原"> 1行代码> <代码类=" sql关键字">设置> <代码(0.00秒 <代码类=皊ql空间”>,,

<代码类=皊ql平原”> mysql>集全球init_connect=& # 39;插入db_monitor。accesslog (thread_id、log_time localname matchname)值(connection_id(),(),用户(),current_user()); & # 39;,,


在my.conf中添加

init_connect=& # 39;插入db_monitor。accesslog (thread_id、log_time localname matchname)值(connection_id(),(),用户(),current_user ()); & # 39;

该点很重要

该参数只对普通用户生效,有超级权限的都不会有作用。

如果是普通用户,增加了该功能后,一定需要授权:

  

mysql利用init-connect初始化实现连接到实例