在某些应用里,需要知道谁对表进行了操作,进行了什么操作,所为责任的追朔。在MYSQL里,可以使用触发器实现。
1:创建测试表
mysql> create table A(a int); Query OK, 0 rows affected (0.01 sec) |
2:创建追踪表,里面包含表名称,操作类型,操作时间,操作员,操作机器IP地址
mysql> create table trace(tbname varchar(30),DML_type varchar(10),DML_time datetime,DML_user varchar(30),DML_IP varchar(30)); Query OK, 0 rows affected (0.01 sec) |
3:在A表创建触发器
create trigger insert_a after insert on A1 for each rowinsert into trace values ('A1','INSERT',NOW(),substring_index(current_User(),'@',1),substring_index(current_User(),'@',-1)); |
4:插入测试数据
mysql> insert into A values(1); Query OK, 1 row affected (0.00 sec)mysql> select * from trace;+--------+----------+---------------------+----------+-----------+| tbname | DML_type | DML_time | DML_user | DML_IP |+--------+----------+---------------------+----------+-----------+| A | INSERT | 2010-11-29 17:58:12 | root | localhost |+--------+----------+---------------------+----------+-----------+1 row in set (0.00 sec)mysql> select * from trace;+--------+----------+---------------------+----------+--------------+| tbname | DML_type | DML_time | DML_user | DML_IP |+--------+----------+---------------------+----------+--------------+| A | INSERT | 2010-11-29 17:58:12 | root | localhost || A | INSERT | 2010-11-29 17:58:38 | cpc | 192.168.0.30 |+--------+----------+---------------------+----------+--------------+2 rows in set (0.00 sec)mysql> |
这样,当0.30的机器以CPC用户登录时候,对A作了一个插入的操作,在这个表里就记录得很详细了。
管理好数据库的用户下,查询这个表,就能够追踪到责任人了。