Chinaunix首页 | 论坛 | 博客
  • 博客访问: 489802
  • 博文数量: 99
  • 博客积分: 3621
  • 博客等级: 中校
  • 技术积分: 1089
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-22 16:29
文章存档

2012年(21)

2011年(28)

2010年(50)

分类: Mysql/postgreSQL

2010-11-29 18:00:27

在某些应用里,需要知道谁对表进行了操作,进行了什么操作,所为责任的追朔。在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 row
insert 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作了一个插入的操作,在这个表里就记录得很详细了。
管理好数据库的用户下,查询这个表,就能够追踪到责任人了。
阅读(2560) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-11-30 11:01:30

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com