Чи можливо виключити конкретних користувачів у активності журналу PostgreSQL?


10

Мені потрібно стежити за активністю користувачів у наших базах даних. Я встановив наступні параметри в postgresql.conf:

log_min_duration_statement = 0
log_connections = on
log_disconnections = on
log_line_prefix = '%t %a %d %h %u |'

Однак я усвідомлюю, що більшість файлів журналів заповнені операторами, виконаними postgresкористувачем, які використовуються сценаріями, які я написав для виконання завдань технічного обслуговування: перераховувати матеріалізовані представлення, pg_dump, pg_restore, витягувати представлення у вигляді табличних файлів тощо. Результат щоденний файли журналу розміром понад 12 Мб.

Чи є спосіб виключити певну активність користувачів із журналу?


3
IIRC ALTER USER ... SET log_connections = offтощо
Крейг Рінгер

Блискуче, я це зроблю.
Sébastien Clément

1
@CraigRinger увійшов як dezso( суперпользователь ), я завжди отримую, ERROR: parameter "log_connections" cannot be set after connection startколи намагаюсяALTER ROLE bob SET log_connections = off
дез

@dezso Drat. Частина, чому я пройшов кваліфікацію IIRC ... не була впевнена.
Крейг Рінгер

1
@CraigRinger Я спробував це вчора, думаючи, що це можливо - тоді звернувся з питанням: D
dezso

Відповіді:


5

За допомогою ALTER ROLE ... SET parameter;команди можна було налаштувати конкретні користувальницькі параметри. Зауважте, що параметр набирає чинності лише після виходу з системи.

Налаштування log_min_duration_statement = -1 (1-й логін):

psql консоль

P:\>psql -U postgres -h 132.156.208.45 -d my_db

my_db=# SHOW log_min_duration_statement;
 log_min_duration_statement
----------------------------
 0
(1 ligne)

my_db=# SELECT COUNT(*) FROM organisms;
 count
-------
   153
(1 ligne)

my_db=# ALTER ROLE postgres SET log_min_duration_statement=-1;
ALTER ROLE

my_db=# SHOW log_min_duration_statement;
 log_min_duration_statement
----------------------------
 0
(1 ligne)

my_db=# SELECT COUNT(*) FROM mv_rings;
 count
--------
 115270
(1 ligne)

my_db=# \q

Результат у журналі:

Зауважте, що протягом цього сеансу всі оператори видно у журналі навіть після встановлення log_min_duration_statement = -1.

2015-10-15 14:14:01 EDT [unknown] my_db 123.456.789.012 postgres |LOG:  connection authorized: user=postgres database=my_db
2015-10-15 14:14:08 EDT psql my_db 123.456.789.012 postgres |LOG:  duration: 0.000 ms  statement: SHOW log_min_duration_statement;
2015-10-15 14:15:26 EDT psql my_db 123.456.789.012 postgres |LOG:  duration: 32.000 ms  statement: SELECT COUNT(*) FROM organisms;
2015-10-15 14:15:45 EDT psql my_db 123.456.789.012 postgres |LOG:  duration: 31.000 ms  statement: ALTER ROLE postgres SET log_min_duration_statement=-1;
2015-10-15 14:16:08 EDT psql my_db 123.456.789.012 postgres |LOG:  duration: 0.000 ms  statement: SHOW log_min_duration_statement;
2015-10-15 14:17:10 EDT psql my_db 123.456.789.012 postgres |LOG:  duration: 2059.000 ms  statement: SELECT COUNT(*) FROM mv_rings;
2015-10-15 14:17:29 EDT psql my_db 123.456.789.012 postgres |LOG:  disconnection: session time: 0:03:27.450 user=postgres database=my_db host=123.456.789.012 port=65269

Побачивши ефект log_min_duration_statement (другий логін):

psql консоль

P:\>psql -U postgres -h 132.156.208.45 -d my_db

my_db=# SHOW log_min_duration_statement;
 log_min_duration_statement
----------------------------
 -1
(1 ligne)

my_db=# SELECT COUNT(*) FROM germplasms;
 count
--------
 475290
(1 ligne)

my_db=# \q

Результат у журналі:

Як і очікувалося, жодна з заяв не реєструється.

2015-10-15 14:17:44 EDT [unknown] my_db 123.456.789.012 postgres |LOG:  connection authorized: user=postgres database=my_db
2015-10-15 14:20:27 EDT psql my_db 123.456.789.012 postgres |LOG:  disconnection: session time: 0:02:43.333 user=postgres database=my_db host=123.456.789.012 port=49372
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.