Как стать автором
Обновить

Аудит таблиц с пространственными объектами в PostGIS/PostgreSQL

Время на прочтение2 мин
Количество просмотров4K
imageВ предыдущей статье был рассмотрен пример с пространственными объектами и разделением доступа к ним по пользователям.
Теперь рассмотрим пример аудита данной базы. Нас интересует: кто, когда и что сделал с таблицей. Какую запись (читай «объект») добавил, какую удалил, какую изменил, чтобы в дальнейшем не было различных «недоразумений».

Первое, что сделаем, создадим копии уже имеющихся таблиц с пространственными объектами и назовем их другими именами. Даже не саму таблицу, а ее структуру. Например:

CREATE TABLE audit_building AS SELECT * FROM building1;


Далее добавляем в таблицы для аудита новые колонки:

ALTER TABLE audit_building ADD COLUMN operation char(1); -- будет показывать, какое действие проводилось над объектом
ALTER TABLE audit_building ADD COLUMN stamp timestamp; -- время совершения действия
ALTER TABLE audit_building ADD COLUMN userid text; -- и кто этим занимался

После этого создаем триггер, который и будет отслеживать все изменения:

CREATE OR REPLACE FUNCTION process_emp_audit() RETURNS TRIGGER AS $audit_building$
 BEGIN
IF (TG_OP = 'DELETE') THEN
 INSERT INTO audit_building SELECT 'D', now(), user, OLD.*;
 RETURN OLD;
 ELSIF (TG_OP = 'UPDATE') THEN
 INSERT INTO audit_building SELECT 'U', now(), user, NEW.*;
 RETURN NEW;
 ELSIF (TG_OP = 'INSERT') THEN
 INSERT INTO audit_building SELECT 'I', now(), user, NEW.*;
 RETURN NEW;
 END IF;
 RETURN NULL; 
 END;
$audit_building$ LANGUAGE plpgsql;

CREATE TRIGGER audit_building
AFTER INSERT OR UPDATE OR DELETE ON building1 FOR EACH ROW EXECUTE PROCEDURE process_emp_audit();

Осталось только пользователям назначить право на создание записей в таблицу аудита:

GRANT SELECT ON audit_building TO user2;

И можно проверять!
Вот что получилось после некоторых манипуляций со слоем:

Здесь мы видим, что пользователь user2 создал 3 новых объекта (I), изменил (U) и удалил (D) один объект. Колонки из таблицы со слоем карты нужны для того, чтобы помотреть, какие именно объекты правил пользователь. Для этого можно использовать поле уникального индентификатора.
Вот и все! Теперь мы установили контроль за всеми изменениями, сделанными в таблицах.
Теги:
Хабы:
Всего голосов 12: ↑9 и ↓3+6
Комментарии2

Публикации