oracle里面可以根据触发器来记录用户的登录次数,登陆IP,登陆时间等信心。在mysql里面有没有这样的方法呢? 同样的登入信息审计功能在mysql里面也是有的。
1.准备工作: 数据库:mysql8.0.11
操作系统: window
2.创建日志信息记录数据库和表:
create database accesslog;
CREATE TABLE accesslog.accesslog (`id` int(11) primary key auto_increment, `time` timestamp, `localname` varchar(30), `matchname` varchar(30))
3.在mysql的配置文件下增加init-connect参数
a.mysql8的配置文件my.ini不在安装目录下,而在*:\ProgramData\MySQL\MySQL Server 8.0下,是一个隐藏文件,需要在隐藏文件设置中打开才能找到。
b.在my.ini的[mysqld]下设置参数:
skip-external-locking
init-connect='insert into accesslog.accesslog(time, localname, matchname) values(now(),user(),current_user());'
server-id=1
4.重启mysql服务
net stop mysql
net start mysql
5.创建具有对数据库accesslog有插入权限的普通用户
create USER user1@'%' IDENTIFIED by 'user1';
create USER user2@'%' IDENTIFIED by 'user2';
grant select on accesslog.* to user1@'%';
grant select,insert on accesslog.* to user2@'%';
flush PRIVILEGES;
6.用创建用户登录mysql
a.mysql -uuser1 -puser1登陆成功,执行 select * from accesslog.accesslog 报错
ERROR 2013 (HY000): Lost connection to MySQL server during query
b.mysql -uuser2 -puser2登陆成功,执行 select * from accesslog.accesslog 成功
7.查看数据库accesslog的日志记录信息表
select * from accesslog.accesslog,发现没有记录,查看err文件后报错:
[Warning] [MY-013130] [Server] Aborted connection 11 to db: 'unconnected' user: 'user2' host: 'localhost' (init_connect command failed; diagnostics area: MY-001064 - You have an error in your SQL syntax; check the manual that corr)
解决方法:init-connect 参数里面的语法错误,修改正确语法后解决。