F.40. pg_proaudit â ÑегиÑÑÑаÑÐ¸Ñ ÑазлиÑнÑÑ ÑобÑÑий, ÑвÑзаннÑÑ Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑÑÑ #
- F.40.1. УÑÑановка ÑаÑÑиÑениÑ
pg_proaudit- F.40.2. Удаление ÑаÑÑиÑениÑ
pg_proaudit- F.40.3. ФÑнкÑии Ð´Ð»Ñ Ð½Ð°ÑÑÑойки запиÑи ÑобÑÑий безопаÑноÑÑи в жÑÑнал
- F.40.4. ÐÑедÑÑавление pg_proaudit_settings
- F.40.5. СобÑÑÐ¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи
- F.40.6. ÐаÑамеÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии жÑÑнала ÑобÑÑий безопаÑноÑÑи
- F.40.7. ÐÑоÑмоÑÑ Ð¶ÑÑнала ÑобÑÑий безопаÑноÑÑи
- F.40.8. ÐÑимеÑÑ
- F.40.2. Удаление ÑаÑÑиÑениÑ
РаÑÑиÑение pg_proaudit позволÑÐµÑ ÑегиÑÑÑиÑоваÑÑ ÑазлиÑнÑе ÑобÑÑиÑ, ÑвÑзаннÑе Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑÑÑ.
pg_proaudit ÑабоÑÐ°ÐµÑ Ð¿Ð°ÑаллелÑно Ñо ÑÑандаÑÑнÑми ÑÑедÑÑвами пÑоÑоколиÑÐ¾Ð²Ð°Ð½Ð¸Ñ PostgreSQL (ÑбоÑÑиком ÑообÑений) и не завиÑÐ¸Ñ Ð¾Ñ Ð½Ð¸Ñ
. ÐÑÑнал ÑобÑÑий безопаÑноÑÑи ÑаÑÑиÑÐµÐ½Ð¸Ñ pg_proaudit ÑоÑ
ÑанÑеÑÑÑ Ð¾ÑделÑно Ð¾Ñ Ð¶ÑÑнала ÑабоÑÑ ÑеÑвеÑа. ÐÑи запÑÑке Postgres Pro Standard ÑаÑÑиÑение pg_proaudit запÑÑÐºÐ°ÐµÑ ÑпеÑиалÑнÑй ÑоновÑй пÑоÑеÑÑ, коÑоÑÑй запиÑÑÐ²Ð°ÐµÑ Ð² жÑÑнал инÑоÑмаÑÐ¸Ñ Ð¾ ÑобÑÑиÑÑ
безопаÑноÑÑи.
ÐÑавила ÑегиÑÑÑаÑии ÑобÑÑий ÑоÑ
ÑанÑÑÑÑÑ Ð² Ñайле конÑигÑÑаÑии pg_proaudit.conf, ÑаÑполагаÑÑемÑÑ Ð² каÑалоге даннÑÑ
клаÑÑеÑа (PGDATA). Ðн пÑедÑÑавлÑÐµÑ Ñобой ÑекÑÑовÑй Ñайл, коÑоÑÑй можно ÑедакÑиÑоваÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно, иÑполÑзÑÑ Ð¸Ð½ÑÑÑÑменÑÑ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑемÑ. ÐÐ»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐµÐ³Ð¾ ÑодеÑжимого ÑÑедÑÑвами SQL пÑедÑÑмоÑÑÐµÐ½Ñ Ð½ÐµÑколÑко ÑÑнкÑий pg_proaudit. РпÑедÑÑавлении pg_proaudit_settings можно поÑмоÑÑеÑÑ ÑекÑÑие пÑавила pg_proaudit, даже еÑли они еÑÑ Ð½Ðµ бÑли ÑоÑ
ÑÐ°Ð½ÐµÐ½Ñ Ð² Ñайл pg_proaudit.conf.
ÐÑе ÑикÑиÑÑемÑе ÑобÑÑÐ¸Ñ ÑазделÑÑÑÑÑ Ð½Ð° ÑледÑÑÑие клаÑÑÑ:
ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ DDL Ð´Ð»Ñ ÑозданиÑ, Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑекÑов СУÐÐ (баз даннÑÑ , ÑаблиÑнÑÑ Ð¿ÑоÑÑÑанÑÑв, ÑÑ ÐµÐ¼, ÑаблиÑ, пÑедÑÑавлений, поÑледоваÑелÑноÑÑей, ÑзÑков, ÑÑнкÑий)
ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾ÑÑÑпом к обÑекÑам баз даннÑÑ (
GRANT,REVOKE)ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ DML Ð´Ð»Ñ Ð¾Ð±ÑаÑÐµÐ½Ð¸Ñ Ðº обÑекÑам баз даннÑÑ (
INSERT,UPDATE,DELETE,SELECT,TRUNCATEÐ´Ð»Ñ ÑаблиÑ/пÑедÑÑавлений,EXECUTEÐ´Ð»Ñ ÑÑнкÑий)ÑобÑÑÐ¸Ñ Ð°ÑÑенÑиÑикаÑии/оÑклÑÑÐµÐ½Ð¸Ñ Ð¾Ñ Ð±Ð°Ð· даннÑÑ
вÑе командÑ, вÑполнÑемÑе опÑеделÑннÑм полÑзоваÑелем
СобÑÑÐ¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи могÑÑ Ð·Ð°Ð¿Ð¸ÑÑваÑÑÑÑ ÐºÐ°Ðº в ÑенÑÑализованное ÑÑедÑÑво жÑÑналиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑÐµÐ¼Ñ (syslog), Ñак и в обÑÑнÑе ÑайлÑ. Ðба ваÑианÑа могÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñеменно. ÐÑе запиÑи pg_proaudit в syslog имеÑÑ Ð¼ÐµÑÐºÑ AUDIT, ÑÑо позволÑÐµÑ Ð¾Ð´Ð½Ð¾Ð·Ð½Ð°Ñно иÑ
опÑеделÑÑÑ. Ð¤Ð°Ð¹Ð»Ñ Ð¶ÑÑнала ÑобÑÑий могÑÑ Ð·Ð°Ð¿Ð¸ÑÑваÑÑÑÑ Ð² ÑоÑмаÑаÑ
CEF (обÑий ÑоÑÐ¼Ð°Ñ Ð·Ð°Ð¿Ð¸Ñи ÑобÑÑий, Common Event Format) и CSV (знаÑениÑ, ÑазделÑннÑе запÑÑÑми, Comma Separated Values). Ðаждое ÑобÑÑие запиÑÑваеÑÑÑ Ð² оÑделÑнÑÑ ÑÑÑокÑ, в коÑоÑой вÑделÑÑÑÑÑ ÑледÑÑÑие полÑ:
даÑа и вÑÐµÐ¼Ñ ÑобÑÑиÑ
Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ (
current_user)Ð¸Ð¼Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
иденÑиÑикаÑÐ¾Ñ ÑеÑвеÑного пÑоÑеÑÑа (PID)
ÑÑÐ¾Ð²ÐµÐ½Ñ Ð²Ð°Ð¶Ð½Ð¾ÑÑи:
INFOилиERRORпоÑледоваÑелÑнÑй Ð½Ð¾Ð¼ÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð² ÑеанÑе
Ð½Ð¾Ð¼ÐµÑ Ð¿Ð¾Ð´ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð² ÑложнÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Ñ (
CREATE TABLE ... AS SELECT ...)Ð¸Ð¼Ñ Ð¾Ð¿ÐµÑаÑоÑа
Ñип обÑекÑа
Ð¸Ð¼Ñ Ð¾Ð±ÑекÑа
ÑезÑлÑÑÐ°Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа:
SUCCESS(ÑÑÐ¿ÐµÑ ) илиFAILURE(оÑказ)дополниÑелÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ, напÑÐ¸Ð¼ÐµÑ ÑообÑение об оÑибке в ÑлÑÑае ÑезÑлÑÑаÑа
FAILUREили паÑамеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð¸ название пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑобÑÑиÑAUTHENTICATE; незавеÑÑÑннÑе попÑÑки аÑÑенÑиÑикаÑии помеÑаÑÑÑÑ ÐºÐ°Ðº [EOF. No credentials provided] (ÐÐ¾Ð½ÐµÑ Ñайла. УÑÑÑнÑе даннÑе не пÑедоÑÑавленÑ)ÑекÑÑ SQL-командÑ
паÑамеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ (напÑимеÑ, длÑ
PREPARE)Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ (
session_user)ÑникалÑнÑй иденÑиÑикаÑÐ¾Ñ ÑобÑÑÐ¸Ñ (в ÑоÑмаÑе UUIDv7 )
иденÑиÑикаÑÐ¾Ñ ÑÑанзакÑии (XID)
виÑÑÑалÑнÑй иденÑиÑикаÑÐ¾Ñ ÑÑанзакÑии (VXID)
СобÑÑие ÑодеÑÐ¶Ð¸Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ знаÑениÑÑ
session_user и current_user, коÑоÑÑе иÑполÑзÑÑÑÑÑ Ð² ÑамкаÑ
полÑзоваÑелÑÑкого ÑеанÑа. ÐоÑÑÐ¾Ð¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ иденÑиÑиÑиÑоваÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ, даже еÑли он ÑÐ¼ÐµÐ½Ð¸Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SET ROLE.
ÐнаÑÐµÐ½Ð¸Ñ XID и VXID могÑÑ Ð±ÑÑÑ Ð½ÑлевÑми, еÑли ÑобÑÑие не оÑноÑиÑÑÑ Ðº ÑÑанзакÑии (напÑимеÑ, ÑобÑÑие DISCONNECT).
ÐÑ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ ÐºÐ°Ñалог, в коÑоÑом бÑдÑÑ Ñ
ÑаниÑÑÑÑ ÑÐ°Ð¹Ð»Ñ Ð¶ÑÑналов безопаÑноÑÑи и наÑÑÑоиÑÑ ÑоÑаÑÐ¸Ñ ÑÑиÑ
Ñайлов. Ð pg_proaudit пÑедÑÑмоÑÑена возможноÑÑÑ Ð¿ÐµÑеклÑÑÐµÐ½Ð¸Ñ Ð½Ð° новÑй Ñайл жÑÑнала либо поÑле опÑеделÑнного инÑеÑвала вÑемени, либо по доÑÑижении опÑеделÑнного ÑазмеÑа Ñайла жÑÑнала. ÐÑо позволÑÐµÑ Ð¾ÑганизоваÑÑ Ð¿ÑоÑедÑÑÑ Ð¾ÑиÑÑки жÑÑналов безопаÑноÑÑи.
ÐолÑзоваÑÐµÐ»Ñ Postgres Pro Ñ Ð°ÑÑибÑÑом SUPERUSER должен даваÑÑ Ð´Ð¾ÑÑÑп к ÑаÑÑиÑÐµÐ½Ð¸Ñ pg_proaudit и жÑÑналам ÑобÑÑий безопаÑноÑÑи ÑолÑко полÑзоваÑелÑм, иÑполнÑÑÑим ÑÐ¾Ð»Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑаÑоÑа инÑоÑмаÑионной безопаÑноÑÑи.
F.40.1. УÑÑановка ÑаÑÑиÑÐµÐ½Ð¸Ñ pg_proaudit #
РаÑÑиÑение pg_proaudit вклÑÑено в ÑоÑÑав Postgres Pro Standard как ÑÑандаÑÑное ÑаÑÑиÑение. ЧÑÐ¾Ð±Ñ Ð·Ð°Ð´ÐµÐ¹ÑÑвоваÑÑ pg_proaudit, вÑполниÑе ÑледÑÑÑие дейÑÑвиÑ:
ÐобавÑÑе
pg_proauditв пеÑеменнÑÑshared_preload_librariesв Ñайлеpostgresql.conf:shared_preload_libraries = 'pg_proaudit'
ÐеÑезагÑÑзиÑе ÑеÑÐ²ÐµÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð´Ð»Ñ Ð¿ÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹. ЧÑÐ¾Ð±Ñ ÑбедиÑÑÑÑ, ÑÑо библиоÑека
pg_proauditÑÑÑановлена пÑавилÑно, вÑполниÑе ÑледÑÑÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ:SHOW shared_preload_libraries;
Ркаждой базе даннÑÑ , Ð´Ð»Ñ ÐºÐ¾ÑоÑой Ð´Ð¾Ð»Ð¶Ð½Ñ ÑегиÑÑÑиÑоваÑÑÑÑ ÑобÑÑÐ¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи, ÑоздайÑе ÑаÑÑиÑение
pg_proaudit, вÑполнив ÑледÑÑÑий запÑоÑ:CREATE EXTENSION pg_proaudit;
РаÑÑиÑение
pg_proauditдобавлÑÐµÑ Ð½ÐµÑколÑко ÑÑнкÑий Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ñайломpg_proaudit.conf, пÑедÑÑавлениеpg_proaudit_settings, показÑваÑÑее ÑекÑÑие пÑавилаpg_proaudit, и ÑобÑÑийнÑе ÑÑиггеÑÑ.
F.40.2. Удаление ÑаÑÑиÑÐµÐ½Ð¸Ñ pg_proaudit #
ЧÑÐ¾Ð±Ñ ÐºÐ¾ÑÑекÑно ÑдалиÑÑ pg_proaudit, вÑполниÑе ÑледÑÑÑие Ñаги:
УдалиÑе ÑаÑÑиÑение
pg_proaudit, вÑполнив ÑледÑÑÑий запÑоÑ:DROP EXTENSION pg_proaudit;
УдалиÑе
pg_proauditиз пеÑеменнойshared_preload_librariesв Ñайлеpostgresql.conf.ÐÑопÑÑÑиÑе ÑÑÐ¾Ñ Ñаг, еÑли в клаÑÑеÑе неÑколÑко баз даннÑÑ Ð¸ ÑдалиÑÑ ÑаÑÑиÑение Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑолÑко Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ из Ð½Ð¸Ñ . Рданном ÑлÑÑае пеÑед Ñдалением ÑаÑÑиÑÐµÐ½Ð¸Ñ ÑекомендÑеÑÑÑ ÑдалиÑÑ Ð¿Ñавила ÑегиÑÑÑаÑии ÑобÑÑий, оÑноÑÑÑиеÑÑ Ðº ÑооÑвеÑÑÑвÑÑÑей базе даннÑÑ .
F.40.3. ФÑнкÑии Ð´Ð»Ñ Ð½Ð°ÑÑÑойки запиÑи ÑобÑÑий безопаÑноÑÑи в жÑÑнал #
ÐÐ»Ñ Ð½Ð°ÑÑÑойки ÑегиÑÑÑаÑии ÑобÑÑий в pg_proaudit пÑедÑÑмоÑÑен SQL-инÑеÑÑейÑ, ÑоÑÑоÑÑий из ÑазлиÑнÑÑ
ÑÑнкÑий, а Ñакже пÑедÑÑавление pg_proaudit_settings.
pg_proaudit_set_rule(db_name text, event_type text, object_type text, object_name text, role_name text, comment text)
СоздаÑÑ Ð¿Ñавило ÑегиÑÑÑаÑии ÑобÑÑий Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñми паÑамеÑÑами. РегиÑÑÑаÑÐ¸Ñ Ð½Ð°ÑинаеÑÑÑ ÑÑÐ°Ð·Ñ Ð¿Ð¾Ñле завеÑÑÐµÐ½Ð¸Ñ ÑÑнкÑии pg_proaudit_set_rule(), но Ñайл pg_proaudit.conf не изменÑеÑÑÑ. ÐÐ»Ñ ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ в Ñайле pg_proaudit.conf вÑзовиÑе ÑÑнкÑÐ¸Ñ pg_proaudit_save().
ÐÑгÑменÑÑ:
db_nameâ Ð¸Ð¼Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , Ð´Ð»Ñ ÐºÐ¾ÑоÑой задаÑÑÑÑ Ð¿Ñавило ÑегиÑÑÑаÑии ÑобÑÑий. Указание NULL или пÑÑÑой ÑÑÑоки ознаÑаеÑ, ÑÑо ÑегиÑÑÑиÑÑÑÑÑÑ ÑобÑÑÐ¸Ñ Ð´Ð»Ñ Ð²ÑÐµÑ Ð±Ð°Ð· даннÑÑ , в коÑоÑÑÑ Ñоздано ÑаÑÑиÑениеpg_proaudit. ÐÑи Ñказании знаÑÐµÐ½Ð¸Ñ current_database() ÑобÑÑÐ¸Ñ ÑегиÑÑÑиÑÑÑÑÑÑ Ð´Ð»Ñ ÑекÑÑей Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ .event_typeâ Ñип ÑобÑÑий, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ ÑегиÑÑÑиÑоваÑÑÑÑ, вклÑÑÐ°Ñ Ð¸Ð¼ÐµÐ½Ð° опеÑаÑоÑов SQL, а Ñакже Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ ÑобÑÑийAUTHENTICATEиDISCONNECT. ÐÑли Ñказано знаÑениеALL, NULL или пÑÑÑÐ°Ñ ÑÑÑока, вклÑÑаеÑÑÑ ÑегиÑÑÑаÑÐ¸Ñ Ð²ÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½ÑÑ ÑобÑÑий Ð´Ð»Ñ Ð¾Ð±ÑекÑов заданного Ñипа. ÐапÑимеÑ, Ð´Ð»Ñ Ð¾Ð±ÑекÑов ÑипаTABLEклÑÑевое ÑловоALLвклÑÑÐ°ÐµÑ ÑегиÑÑÑаÑÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´SELECT,INSERT,UPDATE,DELETE,TRUNCATE,COPY, а ÑакжеCREATE,ALTERиDROP. Также можно наÑÑÑоиÑÑ ÑегиÑÑÑаÑÐ¸Ñ ÐºÐ»Ð°ÑÑов ÑобÑÑий, иÑполÑзÑÑ ÑледÑÑÑие знаÑениÑ:ALL_DDL,ALL_DDL_NONTEMP,ALL_DML,ALL_DML_NONTEMP,ALL_MOD,ALL_PROC,ALL_ROLEиMISC. ÐолнÑй ÑпиÑок допÑÑÑимÑÑ Ð·Ð½Ð°Ñений паÑамеÑÑаevent_typeпÑиведÑн в ÐодÑазделе F.40.5.object_typeâ Ñип обÑекÑов, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑегиÑÑÑиÑоваÑÑÑÑ ÑобÑÑÐ¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи. ÐÑли Ñказано знаÑениеALL, NULL или пÑÑÑÐ°Ñ ÑÑÑока, вклÑÑаеÑÑÑ ÑегиÑÑÑаÑÐ¸Ñ ÑобÑÑий Ð´Ð»Ñ Ð²ÑÐµÑ Ñипов обÑекÑов. ÐапÑимеÑ, Ð´Ð»Ñ ÑегиÑÑÑаÑии вÑÐµÑ Ð¿Ð¾Ð¿ÑÑок доÑÑÑпа к ÑÑоÑонним ÑаблиÑам ÑкажиÑе Ñип обÑекÑаFOREIGN TABLEÐ´Ð»Ñ ÑобÑÑиÑSELECT. ÐÑли вevent_typeпеÑедаÑÑÑÑAUTHENTICATE,DISCONNECT,SETилиRESET, вobject_typeдолжен пеÑедаваÑÑÑÑ NULL. ÐÐ»Ñ Ð²ÑÐµÑ ÑобÑÑий, оÑноÑÑÑÐ¸Ñ ÑÑ Ðº дейÑÑвиÑм Ñ Ð¿Ð¾Ð»ÑзоваÑелÑми, напÑимеÑCREATE USERилиDROP USER, в каÑеÑÑве Ñипа обÑекÑа нÑжно пеÑедаваÑÑROLE. ÐоддеÑживаÑÑÑÑ ÑледÑÑÑие ÑÐ¸Ð¿Ñ Ð¾Ð±ÑекÑов:COMPOSITE TYPE,DATABASE,EVENT TRIGGER,FUNCTION,INDEX,PREPARED STATEMENT,ROLE,SEQUENCE,SCHEMA,TABLE,FOREIGN TABLE,TOAST TABLE,TABLESPACE,VIEW,MATERIALIZED VIEW,CATALOG RELATIONиCATALOG FUNCTION.ÐÑимеÑание
ЧÑÐ¾Ð±Ñ ÑегиÑÑÑиÑоваÑÑ ÑобÑÑÐ¸Ñ Ð´Ð»Ñ Ð¾Ð±ÑекÑов ÑиÑÑемного каÑалога, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ вклÑÑиÑÑ Ð¿Ð°ÑамеÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии pg_proaudit.log_catalog_access. РпÑоÑивном ÑлÑÑае ÑÑи ÑобÑÑÐ¸Ñ Ð½Ðµ бÑдÑÑ Ð·Ð°ÑегиÑÑÑиÑованÑ, даже еÑли в пÑавиле Ñказан Ñип обÑекÑа
CATALOG RELATION,CATALOG FUNCTIONилиALL.object_nameâ Ð¸Ð¼Ñ Ð¾Ð±ÑекÑа, Ð´Ð»Ñ ÐºÐ¾ÑоÑого задаÑÑÑÑ Ð¿Ñавило ÑегиÑÑÑаÑии ÑобÑÑий. ÐÑи Ñказании NULL или пÑÑÑой ÑÑÑоки ÑегиÑÑÑаÑÐ¸Ñ ÑобÑÑий вклÑÑаеÑÑÑ Ð´Ð»Ñ Ð²ÑÐµÑ Ð¸Ð¼Ñн обÑекÑов.role_nameâ Ð¸Ð¼Ñ Ñоли, Ð´Ð»Ñ ÐºÐ¾ÑоÑой задаÑÑÑÑ Ð¿Ñавило ÑегиÑÑÑаÑии ÑобÑÑий. ÐÑли Ñказано, позволÑÐµÑ ÑегиÑÑÑиÑоваÑÑ Ð´ÐµÐ¹ÑÑвиÑ, ÑовеÑÑÑннÑе полÑзоваÑелем Ñ Ð¿Ñавами ÑÑой Ñоли. ÐÑо ознаÑаеÑ, ÑÑо как минимÑм один из аÑÑибÑÑов полÑзоваÑелÑÑкого ÑеанÑа,session_userилиcurrent_user, должен либо ÑовпадаÑÑ Ñrole_name, либо пÑÑмо или коÑвенно ÑвлÑÑÑÑÑ Ñленом Ñказанной Ñоли. ÐÑи Ñказании пÑÑÑой ÑÑÑоки или знаÑÐµÐ½Ð¸Ñ NULL вклÑÑаеÑÑÑ ÑегиÑÑÑаÑÐ¸Ñ ÑобÑÑий Ð´Ð»Ñ Ð²ÑÐµÑ Ð¸Ð¼Ñн Ñолей, а пÑи Ñказании знаÑÐµÐ½Ð¸Ñ current_role() ÑобÑÑÐ¸Ñ ÑегиÑÑÑиÑÑÑÑÑÑ Ð´Ð»Ñ ÑекÑÑей Ñоли.commentâ комменÑаÑий, опиÑÑваÑÑий Ñозданное пÑавило ÑегиÑÑÑаÑии ÑобÑÑий. ÐÑÐ¾Ñ Ð°ÑгÑÐ¼ÐµÐ½Ñ Ð½Ðµ влиÑÐµÑ Ð½Ð° вÑполнение пÑавила и не оÑÑажаеÑÑÑ Ð² жÑÑнале.
pg_proaudit_remove_rule(db_name text, event_type text, object_type text, object_name text, role_name text)
УдалÑÐµÑ ÐºÐ¾Ð½ÐºÑеÑное пÑавило ÑегиÑÑÑаÑии ÑобÑÑий Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñми паÑамеÑÑами. ÐÐ»Ñ ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ в Ñайле конÑигÑÑаÑии pg_proaudit.conf вÑзовиÑе ÑÑнкÑÐ¸Ñ pg_proaudit_save().
ÐÑимеÑание
ÐÑли пÑавило, коÑоÑое Ð²Ñ Ñ
оÑиÑе ÑдалиÑÑ, наÑÑÑоено Ð´Ð»Ñ ÑегиÑÑÑаÑии Ñипа ÑобÑÑий DISCONNECT, Ñо ÑобÑÑÐ¸Ñ Ð¾ÑклÑÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¿ÑодолжаÑÑ ÑегиÑÑÑиÑоваÑÑÑÑ Ð¿Ð¾Ñле ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿Ñавила. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ F.40.3.1.
ÐÑгÑменÑÑ:
db_nameâ Ð¸Ð¼Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , Ð´Ð»Ñ ÐºÐ¾ÑоÑой ÑдалÑеÑÑÑ Ð¿Ñавило ÑегиÑÑÑаÑии ÑобÑÑий.event_typeâ Ñип ÑобÑÑий, Ð´Ð»Ñ ÐºÐ¾ÑоÑого ÑдалÑеÑÑÑ Ð¿Ñавило ÑегиÑÑÑаÑии. СпиÑок возможнÑÑ Ð·Ð½Ð°Ñений пÑиведÑн в ÐодÑазделе F.40.5.object_typeâ Ñип обÑекÑа, Ð´Ð»Ñ ÐºÐ¾ÑоÑого ÑдалÑеÑÑÑ Ð¿Ñавило ÑегиÑÑÑаÑии ÑобÑÑий.object_nameâ Ð¸Ð¼Ñ Ð¾Ð±ÑекÑа, Ð´Ð»Ñ ÐºÐ¾ÑоÑого ÑдалÑеÑÑÑ Ð¿Ñавило ÑегиÑÑÑаÑии ÑобÑÑий.role_nameâ Ð¸Ð¼Ñ Ñоли, Ð´Ð»Ñ ÐºÐ¾ÑоÑой ÑдалÑеÑÑÑ Ð¿Ñавило ÑегиÑÑÑаÑии ÑобÑÑий.
pg_proaudit_show()
ÐозвÑаÑÐ°ÐµÑ ÑпиÑок ÑегиÑÑÑиÑÑемÑÑ
ÑобÑÑий в виде ÑаблиÑÑ. ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑименÑеÑÑÑ Ð² пÑедÑÑавлении pg_proaudit_settings.
pg_proaudit_reload()
СÑиÑÑÐ²Ð°ÐµÑ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ ÑегиÑÑÑаÑии из Ñайла pg_proaudit.conf. ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑзÑваÑÑ ÑÑÑ ÑÑнкÑиÑ, еÑли Ñайл pg_proaudit.conf изменÑлÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно ÑÑедÑÑвами опеÑаÑионной ÑиÑÑемÑ.
pg_proaudit_reset()
УдалÑÐµÑ Ð²Ñе пÑавила ÑегиÑÑÑаÑии ÑобÑÑий. ÐÐ»Ñ ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½Ñнной конÑигÑÑаÑии в Ñайле pg_proaudit.conf вÑзовиÑе ÑÑнкÑÐ¸Ñ pg_proaudit_save().
pg_proaudit_save()
СоÑ
ÑанÑÐµÑ Ð¿Ñавила ÑегиÑÑÑаÑии ÑобÑÑий из памÑÑи в Ñайле pg_proaudit.conf. Файл pg_proaudit.conf ÑазмеÑаеÑÑÑ Ð² каÑалоге даннÑÑ
клаÑÑеÑа (PGDATA). ÐзмениÑÑ ÑаÑположение Ñайла pg_proaudit.conf нелÑзÑ.
F.40.3.1. ÐбÑабоÑка ÑобÑÑий оÑклÑÑÐµÐ½Ð¸Ñ Ð¾Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ #
Ðогда наÑÑÑоено пÑавило Ð´Ð»Ñ ÑегиÑÑÑаÑии Ñипа ÑобÑÑий DISCONNECT, и полÑзоваÑÐµÐ»Ñ Ð°ÑÑенÑиÑиÑиÑÑеÑÑÑ Ð² базе даннÑÑ
, Ñо ÑаÑÑиÑение pg_proaudit пÑовеÑÑеÑ, ÑдовлеÑвоÑÑÐµÑ Ð»Ð¸ пÑÐ°Ð²Ð¸Ð»Ñ ÑооÑвеÑÑÑвÑÑÑее ÑобÑÑие оÑклÑÑÐµÐ½Ð¸Ñ Ð¸ нÑжно ли его ÑегиÑÑÑиÑоваÑÑ.
ÐÑли Ñакое ÑобÑÑие должно бÑÑÑ Ð·Ð°ÑегиÑÑÑиÑовано, Ñо Ñдаление пÑавила не оказÑÐ²Ð°ÐµÑ Ð²Ð»Ð¸ÑÐ½Ð¸Ñ Ð½Ð° него. СобÑÑие бÑÐ´ÐµÑ Ð·Ð°ÑегиÑÑÑиÑовано вне завиÑимоÑÑи Ð¾Ñ Ñого, ÑÑÑеÑÑвÑÐµÑ Ð»Ð¸ пÑавило на Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¾ÑклÑÑениÑ.
РаÑÑмоÑÑим ÑледÑÑÑий пÑимеÑ:
ÐдминиÑÑÑаÑÐ¾Ñ Ð½Ð°ÑÑÑÐ°Ð¸Ð²Ð°ÐµÑ ÑледÑÑÑее пÑавило ÑегиÑÑÑаÑии ÑобÑÑий:
SELECT pg_proaudit_set_rule ('postgres', 'DISCONNECT', null, null, null, 'Any disconnect from the postgres DB');ÐолÑзоваÑÐµÐ»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑаеÑÑÑ Ðº базе даннÑÑ
postgresи аÑÑенÑиÑиÑиÑÑеÑÑÑ Ð² ней.ÐоÑколÑÐºÑ Ð¿Ñавило дейÑÑвÑеÑ, позже бÑÐ´ÐµÑ Ð·Ð°ÑегиÑÑÑиÑовано ÑооÑвеÑÑÑвÑÑÑее ÑобÑÑие оÑклÑÑениÑ.
ÐдминиÑÑÑаÑÐ¾Ñ ÑдалÑÐµÑ Ð¿Ñавило ÑегиÑÑÑаÑии ÑобÑÑий, пÑи ÑÑом полÑзоваÑÐµÐ»Ñ Ð²ÑÑ ÐµÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÑн к базе даннÑÑ :
SELECT pg_proaudit_remove_rule('postgres', 'DISCONNECT', null, null, null);ÐолÑзоваÑÐµÐ»Ñ Ð¾ÑклÑÑаеÑÑÑ Ð¾Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ .
СооÑвеÑÑÑвÑÑÑее ÑобÑÑие оÑклÑÑÐµÐ½Ð¸Ñ ÑегиÑÑÑиÑÑеÑÑÑ, неÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо пÑавило бÑло Ñдалено.
F.40.3.2. ÐбÑабоÑка имÑн обÑекÑов #
СÑÑоковÑе пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð¼Ñн Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , полÑзоваÑелÑ, Ñоли и дÑÑÐ³Ð¸Ñ Ð¾Ð±ÑекÑов ÑÑавниваÑÑÑÑ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо Ð¾Ñ ÑегиÑÑÑа, даже еÑли Ð¸Ð¼Ñ Ð¾Ð±ÑекÑа в базе даннÑÑ Ð·Ð°ÐºÐ»ÑÑено в кавÑÑки, и Ñ ÑанÑÑÑÑ Ð² нижнем ÑегиÑÑÑе.
СÑÑоки, пÑедÑÑавлÑÑÑие имена обÑекÑов, необÑ
одимо пеÑедаваÑÑ ÑÑнкÑиÑм pg_proaudit_set_rule и pg_proaudit_remove_rule как обÑÑнÑе ÑÑÑоки: одинаÑнÑÑ ÐºÐ°Ð²ÑÑÐºÑ Ð½ÐµÐ¾Ð±Ñ
одимо ÑдвоиÑÑ Ð±ÐµÐ· ÑкÑаниÑованиÑ, а дÑÑгие ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¿ÐµÑедаÑÑÑÑ ÐºÐ°Ðº еÑÑÑ, без ÑкÑаниÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ пеÑеноÑа.
ÐапÑимеÑ, пÑавила Ð´Ð»Ñ ÑÐ°Ð±Ð»Ð¸Ñ table1 и "TaBlE1" бÑдÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñми, а иÑ
имена можно пеÑедаваÑÑ Ñимволами как веÑÑ
него, Ñак и нижнего ÑегиÑÑÑа, как и имена Ñолей. ÐеÑед Ñозданием пÑавила Ð´Ð»Ñ Ð±Ð°Ð· даннÑÑ
pg_proaudit пÑовеÑÑеÑ, дейÑÑвиÑелÑно ли ÑÑÑеÑÑвÑÐµÑ ÑÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð±Ð°Ð·Ð° даннÑÑ
, и ÑÑа пÑовеÑка ÑÑвÑÑвиÑелÑна к ÑегиÑÑÑÑ.
Ð ÑледÑÑÑÐ¸Ñ Ð¿ÑимеÑÐ°Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ð¾ Ñоздание «ÑÑÑаннÑÑ Â» имÑн обÑекÑов Ñ Ñказанием коÑÑекÑнÑÑ Ð¿Ñавил Ð´Ð»Ñ Ð½Ð¸Ñ .
CREATE TABLE "TAbLe''123"(); SELECT pg_proaudit_set_rule(current_database(), null, null, 'public.TabLe''''123', null, 'tst cmnt');
CREATE TABLE "taBlE""123"(); SELECT pg_proaudit_set_rule(null, null, null, 'public.taBlE"123', null);
CREATE SCHEMA "(BIG!) Schema"; CREATE TABLE "(BIG!) Schema"."My Tab.lE"(); SELECT pg_proaudit_set_rule(null, null, null, '(BIG!) Schema.My Tab.lE', null);
CREATE ROLE "Some '@#$%' person" WITH LOGIN; SELECT pg_proaudit_set_rule(null, 'authenticate', null, null, 'Some ''@#$%'' person');
CREATE ROLE "Some '@#$%' person" WITH SUPERUSER; \c - "Some '@#$%' person" SELECT pg_proaudit_set_rule(null, 'disconnect', null, null, current_user);
CREATE DATABASE " D B 1";
SELECT pg_proaudit_set_rule(' D B 1', 'authenticate', null, null, null);CREATE DATABASE " D b 2"; \c " D b 2" CREATE EXTENSION pg_proaudit; SELECT pg_proaudit_set_rule(current_database(), 'disconnect', null, null, null);
F.40.4. ÐÑедÑÑавление pg_proaudit_settings #
Ð ÑÑом пÑедÑÑавлении показÑваÑÑÑÑ ÑекÑÑие пÑавила pg_proaudit, даже еÑли они еÑÑ Ð½Ðµ бÑли ÑоÑ
ÑÐ°Ð½ÐµÐ½Ñ Ð² Ñайл pg_proaudit.conf. ÐÑедÑÑавление pg_proaudit_settings обÑазÑÑÑ ÑледÑÑÑие ÑÑолбÑÑ:
db_name(text) â Ð¸Ð¼Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , в коÑоÑой ÑегиÑÑÑиÑÑÑÑÑÑ ÑобÑÑиÑ.event_type(text) â Ñип ÑегиÑÑÑиÑÑемÑÑ ÑобÑÑий.object_type(text) â Ñип обÑекÑа, Ð´Ð»Ñ ÐºÐ¾ÑоÑого Ð´Ð¾Ð»Ð¶Ð½Ñ ÑегиÑÑÑиÑоваÑÑÑÑ ÑобÑÑÐ¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи.object_name(text) â Ð¸Ð¼Ñ Ð¾Ð±ÑекÑа, Ð´Ð»Ñ ÐºÐ¾ÑоÑого Ð´Ð¾Ð»Ð¶Ð½Ñ ÑегиÑÑÑиÑоваÑÑÑÑ ÑобÑÑиÑ.role_name(text) â ÑолÑ, Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ коÑоÑой Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑполнÑÑÑÑÑ ÑегиÑÑÑиÑÑемÑе дейÑÑвиÑ.comment(text) â комменÑаÑий, опиÑÑваÑÑий Ñозданное пÑавило ÑегиÑÑÑаÑии ÑобÑÑий.
F.40.5. СобÑÑÐ¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи #
Ðожно наÑÑÑоиÑÑ ÑаÑÑиÑение pg_proaudit Ð´Ð»Ñ ÑегиÑÑÑаÑии ÑобÑÑий безопаÑноÑÑи опÑеделÑннÑÑ
клаÑÑов или конкÑеÑнÑÑ
ÑобÑÑий, Ñказав ÑооÑвеÑÑÑвÑÑÑее знаÑение в аÑгÑменÑе event_type ÑÑнкÑии pg_proaudit_set_rule().
ÐоддеÑживаÑÑÑÑ ÑледÑÑÑие клаÑÑÑ ÑобÑÑий безопаÑноÑÑи:
ALL_DDL:CREATE,ALTER,DROPÐ´Ð»Ñ Ð»Ñбого обÑекÑа Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , за иÑклÑÑением Ñ ÑанимÑÑ Ð¿ÑоÑедÑÑ Ð¸ ÑÑнкÑий.ALL_DDL_NONTEMP: Ñакой же клаÑÑ, какALL_DDL, но его облаÑÑÑ Ð´ÐµÐ¹ÑÑÐ²Ð¸Ñ Ð¾Ð³ÑаниÑена ÑолÑко Ñеми обÑекÑами Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , коÑоÑÑе не Ð½Ð°Ñ Ð¾Ð´ÑÑÑÑ Ð²Ð¾ вÑеменнÑÑ ÑÑ ÐµÐ¼Ð°Ñpg_temp_.nnnALL_DML:SELECT,INSERT,UPDATE,DELETE,TRUNCATEÐ´Ð»Ñ Ð»ÑбÑÑ Ñипов ÑаблиÑ;EXECUTEÐ´Ð»Ñ ÑÑнкÑий и Ñ ÑанимÑÑ Ð¿ÑоÑедÑÑ.ALL_DML_NONTEMP: Ñакой же клаÑÑ, какALL_DML, но его облаÑÑÑ Ð´ÐµÐ¹ÑÑÐ²Ð¸Ñ Ð¾Ð³ÑаниÑена ÑолÑко Ñеми обÑекÑами Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , коÑоÑÑе не Ð½Ð°Ñ Ð¾Ð´ÑÑÑÑ Ð²Ð¾ вÑеменнÑÑ ÑÑ ÐµÐ¼Ð°Ñpg_temp_.nnnALL_MOD:INSERT,UPDATE,DELETE,TRUNCATEÐ´Ð»Ñ Ð»ÑбÑÑ Ñипов ÑаблиÑ.ALL_PROC:CREATE,ALTER,DROPÐ´Ð»Ñ Ð»ÑбÑÑ ÑÑнкÑий и Ñ ÑанимÑÑ Ð¿ÑоÑедÑÑ.ALL_ROLE:CREATE,ALTER,DROPв оÑноÑенииUSER,ROLE,GROUP,PROFILE, а Ñакже вÑполнение командÑGRANT.MISC: вÑе ÑобÑÑиÑ, не оÑноÑÑÑиеÑÑ Ðº дÑÑгим вÑÑепеÑеÑиÑленнÑм клаÑÑам.
ÐоддеÑживаÑÑÑÑ ÑледÑÑÑие ÑобÑÑÐ¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи:
ANALYZE
AUTHENTICATE
DISCONNECT
ALTER AGGREGATE
ALTER COLLATION
ALTER CONVERSION
ALTER DATABASE
ALTER DEFAULT PRIVILEGES
ALTER DOMAIN
ALTER EVENT TRIGGER
ALTER EXTENSION
ALTER FOREIGN DATA WRAPPER
ALTER FOREIGN TABLE
ALTER FUNCTION
ALTER INDEX
ALTER LANGUAGE
ALTER LARGE OBJECT
ALTER MATERIALIZED VIEW
ALTER OPERATOR
ALTER OPERATOR CLASS
ALTER OPERATOR FAMILY
ALTER POLICY
ALTER PROFILE
ALTER ROLE, ALTER USER, ALTER GROUP
ALTER RULE
ALTER SCHEMA
ALTER SEQUENCE
ALTER SERVER
ALTER SYSTEM
ALTER TABLE
ALTER TABLESPACE
ALTER TEXT SEARCH CONFIGURATION
ALTER TEXT SEARCH DICTIONARY
ALTER TEXT SEARCH PARSER
ALTER TEXT SEARCH TEMPLATE
ALTER TRIGGER
ALTER TYPE
ALTER USER MAPPING
ALTER VIEW
CHECKPOINT
CLUSTER
COMMENT
COPY
CREATE ACCESS METHOD
CREATE AGGREGATE
CREATE CAST
CREATE COLLATION
CREATE CONVERSION
CREATE DATABASE
CREATE DOMAIN
CREATE EVENT TRIGGER
CREATE EXTENSION
CREATE FOREIGN DATA WRAPPER
CREATE FOREIGN TABLE
CREATE FUNCTION
CREATE INDEX
CREATE LANGUAGE
CREATE MATERIALIZED VIEW
CREATE OPERATOR
CREATE OPERATOR CLASS
CREATE OPERATOR FAMILY
CREATE POLICY
CREATE PROFILE
CREATE ROLE, CREATE USER, CREATE GROUP
CREATE RULE
CREATE SCHEMA
CREATE SEQUENCE
CREATE SERVER
CREATE TABLE, CREATE TABLE AS, SELECT INTO
CREATE TABLESPACE
CREATE TEXT SEARCH CONFIGURATION
CREATE TEXT SEARCH DICTIONARY
CREATE TEXT SEARCH PARSER
CREATE TEXT SEARCH TEMPLATE
CREATE TRANSFORM
CREATE TRIGGER
CREATE TYPE
CREATE USER MAPPING
CREATE VIEW
DEALLOCATE
DELETE
DISCARD ALL
DISCARD PLANS
DISCARD SEQUENCES
DISCARD TEMP
DO
DROP ACCESS METHOD
DROP AGGREGATE
DROP CAST
DROP COLLATION
DROP CONVERSION
DROP DATABASE
DROP DOMAIN
DROP EVENT TRIGGER
DROP EXTENSION
DROP FOREIGN DATA WRAPPER
DROP FOREIGN TABLE
DROP FUNCTION
DROP INDEX
DROP LANGUAGE
DROP MATERIALIZED VIEW
DROP OPERATOR
DROP OPERATOR CLASS
DROP OPERATOR FAMILY
DROP OWNED
DROP POLICY
DROP PROFILE
DROP ROLE, DROP USER, DROP GROUP
DROP RULE
DROP SCHEMA
DROP SEQUENCE
DROP SERVER
DROP TABLE
DROP TABLESPACE
DROP TEXT SEARCH CONFIGURATION
DROP TEXT SEARCH DICTIONARY
DROP TEXT SEARCH PARSER
DROP TEXT SEARCH TEMPLATE
DROP TRANSFORM
DROP TRIGGER
DROP TYPE
DROP USER MAPPING
DROP VIEW
EXECUTE
FETCH
GRANT
INSERT
MOVE
PREPARE
REASSIGN OWNED
REFRESH MATERIALIZED VIEW
REINDEX
RESET
REVOKE
SECURITY LABEL
SELECT
SET
UPDATE
TRUNCATE TABLE
VACUUM
F.40.6. ÐаÑамеÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии жÑÑнала ÑобÑÑий безопаÑноÑÑи #
РаÑÑиÑение pg_proaudit пÑедоÑÑавлÑÐµÑ Ð½ÐµÑколÑко паÑамеÑÑов конÑигÑÑаÑии Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ñайлами жÑÑналов ÑобÑÑий безопаÑноÑÑи. ÐÑи паÑамеÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ задаÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно в Ñайле конÑигÑÑаÑии postgresql.conf или поÑÑедÑÑвом ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ALTER SYSTEM. ЧÑÐ¾Ð±Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²ÑÑÑпили в ÑилÑ, вÑзовиÑе ÑÑнкÑÐ¸Ñ pg_reload_conf() или пеÑезапÑÑÑиÑе ÑеÑÐ²ÐµÑ Ð±Ð°Ð· даннÑÑ
. ÐÐ»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной наÑÑÑойки можно иÑполÑзоваÑÑ Ð¿Ð°ÑамеÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии syslog_ident и syslog_facility.
pg_proaudit.log_destination(string) #ÐпÑеделÑÐµÑ Ð¼ÐµÑод ÑегиÑÑÑаÑии ÑобÑÑий безопаÑноÑÑи. ÐозможнÑе знаÑениÑ:
csvlogâ запиÑÑваÑÑ ÑобÑÑÐ¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи в Ñайл CSV.ceflogâ запиÑÑваÑÑ ÑобÑÑÐ¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи в Ñайл CEF. CEF â ÑÑо оÑкÑÑÑÑй ÑекÑÑовÑй ÑоÑмаÑ, пÑедназнаÑеннÑй Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñей жÑÑнала. Ðн ÑодеÑÐ¶Ð¸Ñ ÑÑандаÑÑнÑй заголовок и пеÑеменное ÑаÑÑиÑение, оÑоÑмленное в виде Ð¿Ð°Ñ ÐºÐ»ÑÑ-знаÑение.syslogâ пеÑедаваÑÑ ÑобÑÑÐ¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи в syslog.cefsyslogâ пеÑедаваÑÑ ÑобÑÑÐ¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи в ÑоÑмаÑе CEF в syslog.
ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð¾Ð´Ð½Ð¾ или неÑколÑко ÑÑÐ¸Ñ Ð·Ð½Ð°Ñений, ÑазделÑннÑÑ Ð·Ð°Ð¿ÑÑÑми. Ðднако обÑаÑиÑе внимание, ÑÑо знаÑениÑ
syslogиcefsyslogÑвлÑÑÑÑÑ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð¸ÑклÑÑаÑÑими. ÐÑли ÑÐºÐ°Ð·Ð°Ð½Ñ Ð¾Ð±Ð°, пÑиоÑиÑÐµÑ Ð¸Ð¼ÐµÐµÑcefsyslog, а знаÑениеsyslogигноÑиÑÑеÑÑÑ.Ðо ÑмолÑаниÑ:
csvlogpg_proaudit.log_catalog_access(boolean) #ÐпÑеделÑеÑ, бÑдÑÑ Ð»Ð¸ ÑегиÑÑÑиÑоваÑÑÑÑ Ð¾Ð±ÑаÑÐµÐ½Ð¸Ñ Ðº обÑекÑам ÑиÑÑемного каÑалога в ÑÑ ÐµÐ¼Ðµ
pg_catalog.Со знаÑением
offÑакие ÑобÑÑÐ¸Ñ Ð½Ðµ ÑегиÑÑÑиÑÑÑÑÑÑ, даже еÑли еÑÑÑ Ð¿Ñавила Ð´Ð»Ñ Ñипов обÑекÑовCATALOG RELATION,CATALOG FUNCTIONилиALL.Ðе ÑекомендÑеÑÑÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑ Ð´Ð»Ñ ÑÑого паÑамеÑÑа знаÑение
on, еÑли Ð²Ñ Ð½Ðµ планиÑÑеÑе ÑегиÑÑÑиÑоваÑÑ ÑобÑÑÐ¸Ñ Ð´Ð»Ñ Ð¾Ð±ÑекÑов ÑиÑÑемного каÑалога. РпÑоÑивном ÑлÑÑае ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð²Ð»Ð¸ÑÑÑ Ð½Ð° пÑоизводиÑелÑноÑÑÑ Postgres Pro, даже еÑли пÑавила Ð´Ð»Ñ ÑпомÑнÑÑÑÑ Ñипов обÑекÑов оÑÑÑÑÑÑвÑÑÑ.Ðо ÑмолÑаниÑ:
offpg_proaudit.log_command_text(boolean) #ÐпÑеделÑеÑ, бÑÐ´ÐµÑ Ð»Ð¸ запиÑÑваÑÑÑÑ Ð² жÑÑнал ÑекÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ SQL, вÑзÑваÑÑÐ¸Ñ ÑобÑÑÐ¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи.
Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÐºÐ»ÑÑено.
pg_proaudit.log_directory(string) #ÐадаÑÑ Ð¿ÑÑÑ Ðº каÑÐ°Ð»Ð¾Ð³Ñ Ð´Ð»Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ñайлов жÑÑналов в ÑоÑмаÑÐ°Ñ CSV и CEF. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð°Ð±ÑолÑÑнÑй пÑÑÑ Ð¸Ð»Ð¸ пÑÑÑ, заданнÑй оÑноÑиÑелÑно каÑалога даннÑÑ (
PGDATA). ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸ÑполÑзÑеÑÑÑ, еÑли Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа pg_proaudit.log_destination Ñказано знаÑениеcsvlogилиceflog.Ðо ÑмолÑаниÑ:
pg_proauditpg_proaudit.log_filename(string) #ÐпÑеделÑÐµÑ Ñаблон имÑн Ð´Ð»Ñ Ñайлов жÑÑналов ÑобÑÑий безопаÑноÑÑи. ÐÑÐ¾Ñ Ñаблон Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ ÑпеÑпоÑледоваÑелÑноÑÑи Ñ %, Ð¿Ð¾Ñ Ð¾Ð¶Ð¸Ðµ на Ñе, коÑоÑÑе пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ÑпеÑиÑикаÑии
strftimeÑÑандаÑÑа Open Group (http://pubs.opengroup.org/onlinepubs/009695399/functions/strftime.html). ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸ÑполÑзÑеÑÑÑ, еÑли Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа pg_proaudit.log_destination Ñказано знаÑениеcsvlogилиceflog.Ðо ÑмолÑаниÑ:
postgresql-%Y-%m-%d_%H%M%S.logpg_proaudit.log_rotation_size(integer) #ÐадаÑÑ Ð¼Ð°ÐºÑималÑнÑй ÑÐ°Ð·Ð¼ÐµÑ Ñайла жÑÑнала, в килобайÑÐ°Ñ . Ðо доÑÑижении ÑÑого ÑазмеÑа
pg_proauditÑоздаÑÑ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи ÑобÑÑий безопаÑноÑÑи новÑй Ñайл. ÐÑли Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа ÑÑÑановлено знаÑение0, Ñоздание новÑÑ Ñайлов в завиÑимоÑÑи Ð¾Ñ ÑазмеÑа ÑекÑÑего Ñайла оÑклÑÑаеÑÑÑ. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸ÑполÑзÑеÑÑÑ, еÑли Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа pg_proaudit.log_destination Ñказано знаÑениеcsvlogилиceflog.Ðо ÑмолÑаниÑ: 10 ÐÐ
pg_proaudit.log_rotation_age(integer) #ÐадаÑÑ Ð¼Ð°ÐºÑималÑное вÑÐµÐ¼Ñ Ð¶Ð¸Ð·Ð½Ð¸ Ñайла жÑÑнала, в минÑÑÐ°Ñ . Ðо иÑÑеÑении ÑÑого вÑемени
pg_proauditÑоздаÑÑ Ð½Ð¾Ð²Ñй Ñайл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи ÑобÑÑий безопаÑноÑÑи. ÐÑли Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа ÑÑÑановлено знаÑение0, Ñоздание новÑÑ Ñайлов по иÑÑеÑении вÑемени оÑклÑÑаеÑÑÑ. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸ÑполÑзÑеÑÑÑ, еÑли Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа pg_proaudit.log_destination Ñказано знаÑениеcsvlogилиceflog.Ðо ÑмолÑаниÑ: 1 денÑ
pg_proaudit.log_truncate_on_rotation(boolean) #ÐпÑеделÑеÑ, Ð´Ð¾Ð»Ð¶Ð½Ñ Ð»Ð¸ ÑÑекаÑÑÑÑ ÑÐ°Ð¹Ð»Ñ Ð¶ÑÑналов пÑи пеÑеклÑÑении запиÑи на Ñже ÑÑÑеÑÑвÑÑÑий Ñайл жÑÑнала. ÐÑли Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа ÑÑÑановлено знаÑение
off,pg_proauditпÑÐ¾Ð´Ð¾Ð»Ð¶Ð°ÐµÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð² ÐºÐ¾Ð½ÐµÑ Ñайла. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸ÑполÑзÑеÑÑÑ, еÑли Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа pg_proaudit.log_destination Ñказано знаÑениеcsvlogилиceflog.Ðо ÑмолÑаниÑ:
offpg_proaudit.max_rules_count(integer) #ÐпÑеделÑÐµÑ Ð¼Ð°ÐºÑималÑно допÑÑÑимое колиÑеÑÑво пÑавил. ЧÑÐ¾Ð±Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ паÑамеÑÑа вÑÑÑпило в ÑилÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ пеÑезагÑÑзиÑÑ ÑеÑÐ²ÐµÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ .
Ðо ÑмолÑаниÑ: 500
F.40.7. ÐÑоÑмоÑÑ Ð¶ÑÑнала ÑобÑÑий безопаÑноÑÑи #
Ð¤Ð°Ð¹Ð»Ñ Ð¶ÑÑналов ÑобÑÑий безопаÑноÑÑи пÑедÑÑавлÑÑÑ Ñобой ÑекÑÑовÑе ÑайлÑ, коÑоÑÑе можно пÑоÑмоÑÑеÑÑ ÑÑедÑÑвами опеÑаÑионной ÑиÑÑемÑ. ЧÑÐ¾Ð±Ñ Ð¿ÑоÑиÑаÑÑ ÑÐ°Ð¹Ð»Ñ Ð¶ÑÑналов на ÑÑовне SQL, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑимениÑÑ ÑаÑÑиÑение file_fdw â обÑÑÑÐºÑ ÑÑоÑонниÑ
даннÑÑ
Ð´Ð»Ñ Ð¾Ð±ÑаÑÐµÐ½Ð¸Ñ Ðº Ñайлам на ÑеÑвеÑе. ÐÐ»Ñ ÑÑого вÑполниÑе ÑледÑÑÑие дейÑÑвиÑ:
УÑÑановиÑе
file_fdwи ÑоздайÑе опÑеделение ÑÑоÑоннего ÑеÑвеÑа:CREATE EXTENSION file_fdw; CREATE SERVER pg_proauditlog FOREIGN DATA WRAPPER file_fdw;
СоздайÑе ÑÑоÑоннÑÑ ÑаблиÑÑ, опÑеделив ÐµÑ ÑÑолбÑÑ Ð¸ Ñказав абÑолÑÑнÑй пÑÑÑ Ðº ÑÐ°Ð¹Ð»Ñ Ð¶ÑÑнала. ФакÑиÑеÑкий пÑÑÑ Ð¾Ð¿ÑеделÑеÑÑÑ Ð¿Ð°ÑамеÑÑами
pg_proaudit.log_directoryиpg_proaudit.log_filename.CREATE FOREIGN TABLE pg_proaudit_log ( log_time timestamp(3) with time zone, current_usr_name text, database_name text, session_pid text, error_severity text, session_line_num bigint, session_line_subcommand_num bigint, event_type text, object_type text, object_name text, status text, error_message text, query_text text, query_args text, session_usr_name text, uuid text, xid text, vxid text ) SERVER pg_proauditlog OPTIONS (filename 'absolute_file_path_to_log_file.csv', FORMAT 'csv' );
УбедиÑеÑÑ Ð² Ñом, ÑÑо паÑамеÑÑ pg_proaudit.log_destination ÑодеÑÐ¶Ð¸Ñ Ð·Ð½Ð°Ñение csvlog, вклÑÑаÑÑее запиÑÑ ÑобÑÑий безопаÑноÑÑи в ÑÐ°Ð¹Ð»Ñ CSV.
F.40.8. ÐÑимеÑÑ #
РкаÑеÑÑве пÑимеÑа давайÑе наÑÑÑоим ÑегиÑÑÑаÑÐ¸Ñ ÑледÑÑÑÐ¸Ñ ÑобÑÑий:
аÑÑенÑиÑикаÑиÑ/оÑклÑÑение Ð¾Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
postgresвÑе дейÑÑÐ²Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, еÑли как минимÑм один из аÑÑибÑÑов полÑзоваÑелÑÑкого ÑеанÑа,
session_userилиcurrent_user, либо Ñвно ÑÑÑановлен в знаÑениеpostgres, либо пÑÑмо или коÑвенно ÑвлÑеÑÑÑ Ñленом ÑÑой ÑолиÑоздание, изменение и Ñдаление лÑбÑÑ ÑаблиÑ
вÑе опеÑаÑии Ñ ÑаблиÑей
app_table, пÑинадлежаÑей ÑÑ ÐµÐ¼Ðµpublic
ÐÑе ÑобÑÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð·Ð°Ð¿Ð¸ÑÑваÑÑÑÑ Ð² ÑÐ°Ð¹Ð»Ñ Ð² ÑоÑмаÑе CSV и Ñ ÑаниÑÑÑÑ Ð½ÐµÐ´ÐµÐ»Ñ. ÐÐ»Ñ Ð¾Ð±ÑаÑÐµÐ½Ð¸Ñ Ðº жÑÑÐ½Ð°Ð»Ñ ÑобÑÑий Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ оÑганизоваÑÑ Ð´Ð¾ÑÑÑп на ÑÑовне SQL. ÐÐ»Ñ ÑеÑÐµÐ½Ð¸Ñ ÑÑой задаÑи вÑполниÑе ÑледÑÑÑее:
ÐоÑполÑзовавÑиÑÑ psql, ÑбедиÑеÑÑ, ÑÑо пÑедваÑиÑелÑÐ½Ð°Ñ Ð¿Ð¾Ð´Ð³Ð¾Ñовка ÑаÑÑиÑÐµÐ½Ð¸Ñ pg_proaudit в базе даннÑÑ
postgres вÑполнена:
SHOW shared_preload_libraries;
shared_preload_libraries
--------------------------
pg_proaudit
\dx pg_proaudit
List of installed extensions
Name | Version | Schema | Description
-------------+---------+--------+---------------------------------
pg_proaudit | 2.0 | public | provides auditing functionalityÐобавÑÑе ÑледÑÑÑие ÑÑÑоки в Ñайл конÑигÑÑаÑии postgresql.conf:
pg_proaudit.log_destination = 'csvlog' pg_proaudit.log_directory = 'audit' pg_proaudit.log_filename = 'audit-%u.csv' pg_proaudit.log_rotation_age = 1440 pg_proaudit.log_rotation_size = 0 pg_proaudit.log_truncate_on_rotation = on pg_proaudit.log_command_text = on
ЧÑÐ¾Ð±Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²ÑÑÑпили в ÑилÑ, вÑполниÑе:
SELECT pg_reload_conf();
ÐÑовеÑÑÑе, бÑли ли ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ Ð¶ÐµÐ»Ð°ÐµÐ¼Ñе знаÑÐµÐ½Ð¸Ñ ÑледÑÑÑÐ¸Ñ Ð¿Ð°ÑамеÑÑов:
SHOW pg_proaudit.log_destination; SHOW pg_proaudit.log_directory; SHOW pg_proaudit.log_filename; SHOW pg_proaudit.log_rotation_age; SHOW pg_proaudit.log_rotation_size; SHOW pg_proaudit.log_truncate_on_rotation; SHOW pg_proaudit.log_command_text;
ÐÑедположим, ÑÑо ваÑа пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑÑÐ¶ÐµÐ½Ð¸Ñ PGDATA ÑказÑÐ²Ð°ÐµÑ Ð½Ð° каÑалог даннÑÑ
клаÑÑеÑа. Так как в pg_proaudit.log_directory задан оÑноÑиÑелÑнÑй пÑÑÑ, ÑÐ°Ð¹Ð»Ñ Ð¶ÑÑналов бÑдÑÑ Ð½Ð°Ñ
одиÑÑÑÑ Ð² каÑалоге $PGDATA/audit. Создадим пÑÑÑÑе ÑÐ°Ð¹Ð»Ñ Ð´Ð»Ñ Ñеми дней недели и Ñделаем иÑ
доÑÑÑпнÑми ÑолÑко Ð´Ð»Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑа:
touch $PGDATA/audit/audit-1.csv touch $PGDATA/audit/audit-2.csv touch $PGDATA/audit/audit-3.csv touch $PGDATA/audit/audit-4.csv touch $PGDATA/audit/audit-5.csv touch $PGDATA/audit/audit-6.csv touch $PGDATA/audit/audit-7.csv chmod 600 $PGDATA/audit/audit-*.csv
СоздайÑе ÑаблиÑÑ Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñей жÑÑнала:
CREATE TABLE pg_proaudit_log ( log_time timestamp(3) with time zone, current_usr_name text, database_name text, session_pid text, error_severity text, session_line_num bigint, session_line_subcommand_num bigint, event_type text, object_type text, object_name text, status text, error_message text, query_text text, query_args text, session_usr_name text, uuid text, xid text, vxid text );
УÑÑановиÑе ÑаÑÑиÑение file_fdw и ÑоздайÑе ÑÑоÑонний ÑеÑвеÑ:
CREATE EXTENSION file_fdw; CREATE SERVER pg_proauditlog FOREIGN DATA WRAPPER file_fdw;
ТепеÑÑ Ñоздадим Ð´Ð»Ñ ÑаблиÑÑ pg_proaudit_log ÑÐµÐ¼Ñ Ð´Ð¾ÑеÑниÑ
ÑÑоÑонниÑ
ÑаблиÑ, Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ð´Ð½Ñ Ð½ÐµÐ´ÐµÐ»Ð¸:
CREATE FOREIGN TABLE pg_proaudit_log_1 () INHERITS (pg_proaudit_log) SERVER pg_proauditlog OPTIONS (filename '/path_to_PGDATA/audit/audit-1.csv', FORMAT 'csv'); CREATE FOREIGN TABLE pg_proaudit_log_2 () INHERITS (pg_proaudit_log) SERVER pg_proauditlog OPTIONS (filename '/path_to_PGDATA/audit/audit-2.csv', FORMAT 'csv'); CREATE FOREIGN TABLE pg_proaudit_log_3 () INHERITS (pg_proaudit_log) SERVER pg_proauditlog OPTIONS (filename '/path_to_PGDATA/audit/audit-3.csv', FORMAT 'csv'); CREATE FOREIGN TABLE pg_proaudit_log_4 () INHERITS (pg_proaudit_log) SERVER pg_proauditlog OPTIONS (filename '/path_to_PGDATA/audit/audit-4.csv', FORMAT 'csv'); CREATE FOREIGN TABLE pg_proaudit_log_5 () INHERITS (pg_proaudit_log) SERVER pg_proauditlog OPTIONS (filename '/path_to_PGDATA/audit/audit-5.csv', FORMAT 'csv'); CREATE FOREIGN TABLE pg_proaudit_log_6 () INHERITS (pg_proaudit_log) SERVER pg_proauditlog OPTIONS (filename '/path_to_PGDATA/audit/audit-6.csv', FORMAT 'csv'); CREATE FOREIGN TABLE pg_proaudit_log_7 () INHERITS (pg_proaudit_log) SERVER pg_proauditlog OPTIONS (filename '/path_to_PGDATA/audit/audit-7.csv', FORMAT 'csv');
ЧÑÐ¾Ð±Ñ Ð½Ð°ÑÑÑоиÑÑ ÑегиÑÑÑаÑÐ¸Ñ Ð¸Ð½ÑеÑеÑÑÑÑиÑ
ÑобÑÑий безопаÑноÑÑи, подклÑÑиÑеÑÑ Ðº базе даннÑÑ
postgres и вÑполниÑе ÑледÑÑÑие командÑ:
SELECT pg_proaudit_set_rule (current_database(), 'AUTHENTICATE', null, null, null, 'Any authentication in the current DB'); SELECT pg_proaudit_set_rule (current_database(), 'DISCONNECT', null, null, null, 'Any disconnect from the current DB'); SELECT pg_proaudit_set_rule (current_database(), 'ALL', 'TABLE', null, null, 'Any operations with any table in the current DB'); SELECT pg_proaudit_set_rule (current_database(), 'ALL', null, null, 'postgres', 'Any operation by "postgres" user in the current DB');
СоздайÑе ÑаблиÑÑ app_table и вклÑÑиÑе ÑегиÑÑÑаÑÐ¸Ñ Ð²ÑеÑ
опеÑаÑий Ñ ÑÑой ÑаблиÑей:
CREATE TABLE app_table (id int, name text); SELECT pg_proaudit_set_rule (current_database(), 'ALL', null, 'public.app_table', null);
ÐÑовеÑÑÑе, ÑабоÑÐ°ÐµÑ Ð»Ð¸ ÑегиÑÑÑаÑÐ¸Ñ ÑобÑÑий должнÑм обÑазом:
SELECT * FROM pg_proaudit_settings; db_name | event_type | object_type | object_name | role_name | comment ----------+--------------+-------------+------------------+-----------+---------------------------------------------------- postgres | authenticate | ALL | | | Any authentication in the current DB postgres | disconnect | ALL | | | Any disconnect from the current DB postgres | ALL | table | | | Any operations with any table in the current DB postgres | ALL | ALL | | postgres | Any operation by "postgres" user in the current DB postgres | ALL | ALL | public.app_table | | (5 rows)
СоÑ
ÑаниÑе ÑÑи пÑавила ÑегиÑÑÑаÑии ÑобÑÑий в Ñайле pg_proaudit.conf, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¸ не бÑли поÑеÑÑÐ½Ñ Ð¿Ñи пеÑезапÑÑке ÑеÑвеÑа:
SELECT pg_proaudit_save();
ÐÑполним неÑколÑко запÑоÑов, обÑаÑаÑÑиÑ
ÑÑ Ðº ÑаблиÑе app_table:
INSERT INTO app_table VALUES (1, 'first'); SELECT * FROM app_table;
ÐÑовеÑÑÑе запиÑи в жÑÑнале, оÑноÑÑÑиеÑÑ Ðº ÑаблиÑе app_table:
SELECT to_char(log_time, 'DD.MM.YY HH24:MI:SS') AS when, current_usr_name,
session_pid, event_type, query_text, session_usr_name
FROM pg_proaudit_log
WHERE object_name = 'public.app_table';
when | current_usr_name | session_pid | event_type | query_text | session_usr_name
-------------------+------------------+-------------+--------------+---------------------------------------------+------------------
27.09.23 12:44:27 | postgres | 2010 | CREATE TABLE | CREATE TABLE app_table (id int, name text); | postgres
27.09.23 12:45:55 | postgres | 2010 | INSERT | INSERT INTO app_table VALUES (1, 'first'); | postgres
27.09.23 12:46:00 | postgres | 2010 | SELECT | SELECT * FROM app_table; | postgres
(3 rows)ÐÑ Ð½Ð°ÑÑÑоили еженеделÑнÑÑ ÑоÑаÑÐ¸Ñ Ñайлов жÑÑналов Ñ Ð¿ÐµÑеклÑÑением Ñайлов жÑÑналов каждÑй денÑ. ÐÑо ознаÑаеÑ, ÑÑо запÑоÑÑ Ðº ÑаблиÑе pg_proaudit_log бÑдÑÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ ÑолÑко ÑобÑÑиÑ, пÑоизоÑедÑие за поÑледнÑÑ Ð½ÐµÐ´ÐµÐ»Ñ. Ðолее ÑÑаÑÑе ÑобÑÑÐ¸Ñ Ð±ÑдÑÑ Ð°Ð²ÑомаÑиÑеÑки ÑдалÑÑÑÑÑ Ð¿Ñи ÑоÑаÑии Ñайлов. ÐÐ»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑного огÑаниÑÐµÐ½Ð¸Ñ Ð´Ð¾ÑÑÑпа к опÑеделÑннÑм запиÑÑм жÑÑнала Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Ð¾ÑделÑнÑе пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð° базе ÑаблиÑÑ pg_proaudit_log и ÑазÑеÑиÑÑ ÑÑение ÑÑиÑ
пÑедÑÑавлений, иÑполÑзÑÑ Ð²ÑÑÑоеннÑе меÑ
Ð°Ð½Ð¸Ð·Ð¼Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾ÑÑÑпом Postgres Pro.