4

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

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

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

我现在正在做的是在执行查询时,然后在它之后有另一个查询,它将信息插入到我的“活动”表中。

代码:

//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 个单独的查询?

谢谢

4

3 回答 3

2

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

于 2012-02-16T10:55:54.213 回答
1

如何创建触发器?

Thia 不是在 PHP 中进行审计的好主意。

于 2012-02-16T10:52:51.970 回答
1

您如何为您的班级创建一个新方法,例如$db->ql()(from query/log) 首先进行正常查询,而不是采用 themysql_affected_rows()并且它执行类似的操作

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

这样,您将拥有查询的完整历史记录,而不仅仅是查询的类型和运行它的表。

于 2012-02-16T11:02:27.877 回答