记录在数据库上执行哪些活动的方法? -MySQL / PHP

时间:2012-02-16 10:49:16

标签: php mysql logging audit-logging

我决定在我的数据库中创建一个新表,用于审核在我的数据库上执行的所有操作。

我的表“活动”非常简单,包含以下列:

  • activity_id - 主键
  • user_id - 用户的外键
  • action - 正在执行的查询类型(SELECT,UPDATE,DELETE)
  • table - 受影响的表的名称
  • 行 - 受影响行的名称

我现在正在做的是当执行查询时,我在其后面有另一个查询,它将信息插入我的“activity”表。

CODE:

//query
$db->query("DELETE FROM foo WHERE id = '$foo->id'");
//activity record query
$db->query("INSERT INTO acitivity ( user_id, action, table, row ) VALUES ('$user->id', 'Deleted' , '$foo->id', 'foo')");

正如您所看到的,我必须手动为每个查询执行此操作,并且我的系统中有超过100个查询,而且我真的不想键入单个查询来记录发生的情况。

我想知道MySQL中是否有任何功能可以告诉我已经执行了哪些操作,或者PHP中有哪些库或技术可以帮助我?

或者我注定要在我的系统中写出100个单独的查询?

由于

3 个答案:

答案 0 :(得分:2)

为您的表创建ON INSERT,ON_UPDATE和ON_DELETE触发器,用于写入审计活动表的所有更改的详细信息

答案 1 :(得分:1)

创建触发器怎么样?

在PHP中进行审核并不是一个好主意。

答案 2 :(得分:1)

你为自己的课程制作新方法怎么样,比$db->ql()首先进行正常查询query/log,而不是mysql_affected_rows(),它会像

insert into logs set when = now(), query_string = "{$query}", affected_rows = "{$affected_rows}"

通过这种方式,您将拥有查询的完整历史记录,而不仅仅是查询类型和运行的表。