Способ записи, какие действия выполняются в базе данных?MySQL / PHP - PullRequest
4 голосов
/ 16 февраля 2012

Я решил создать новую таблицу в моей базе данных, которая будет использоваться для аудита всех действий, выполняемых над моей базой данных.

Моя таблица "активность" довольно проста и содержитследующие столбцы:

  • activity_id - первичный ключ
  • user_id - внешний ключ пользователя
  • action - тип выполняемого запроса (SELECT, UPDATE, DELETE)
  • таблица - имя затронутой таблицы
  • строка - имя затронутой строки (ей)

Что я делаю в данный момент, когда выполняется запрос Iзатем есть другой запрос, который вставляет информацию в мою "активность" таблицу.

КОД:

//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, который может сказать мне, какие действия были выполненыd или есть какие-нибудь библиотеки или методики в PHP, которые могут мне помочь?

Или я обречен выписать 100 отдельных запросов в моей системе?

Спасибо

Ответы [ 3 ]

2 голосов
/ 16 февраля 2012

Создать триггеры ON INSERT, ON_UPDATE и ON_DELETE для вашей таблицы, которые записывают подробности всех изменений в таблицу операций аудита

1 голос
/ 16 февраля 2012

Как насчет создания нового метода для вашего класса, скажем $db->ql() (из query/log), который сначала делает обычный запрос, затем берет mysql_affected_rows() и выполняет что-то вроде

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

Таким образом, у вас будет полная история запросов, а не только тип запроса и таблица, в которой он был запущен.

1 голос
/ 16 февраля 2012

Как насчет создания триггеров?

Тиа не очень хорошая идея проводить аудит в PHP.

...