क्या 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इत्यादि
क्रेग रिंगर

शानदार, मैं ऐसा करूँगा।
सेबास्टियन क्लेमेंट

1
@ क्रेगिंगर ने dezsoएक सुपरयुसर के रूप में लॉग इन किया , मैं हमेशा ERROR: parameter "log_connections" cannot be set after connection startकोशिश करता हूं कि जबALTER ROLE bob SET log_connections = off
dezso

@ डेज़सो ड्रैट। IRC के साथ क्वालीफाई करने का कारण ... निश्चित नहीं था।
क्रेग रिंगर

1
@ क्रेगिंगर मैंने कल यह कोशिश की है, यह सोचते हुए कि यह संभव है - तब सवाल
उठ गया

जवाबों:


5

ALTER ROLE ... SET parameter;कमांड का उपयोग करके , उपयोगकर्ता-विशिष्ट लॉग पैरामीटर को दर्जी करना संभव था। ध्यान दें कि पैरामीटर केवल लॉगआउट के बाद प्रभावी होता है।

Log_min_duration_statement = -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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.