PostgreSQLのログアクティビティで特定のユーザーを除外することはできますか?


10

データベースでユーザーのアクティビティを監視する必要があります。で次のパラメータを設定しましたpostgresql.conf

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

ただし、ほとんどのログファイルは、postgresユーザーが実行したステートメントで満たされていることを理解しています。これは、メンテナンスタスク用に作成したスクリプトで使用されます。サイズが12 MBを超えるログファイル。

特定のユーザーのアクティビティをログから除外する方法はありますか?


3
IIRC ALTER USER ... SET log_connections = offなど
クレイグリンガー、

すばらしい、私がやります。
セバスチャンクレメント

1
@CraigRingerはdezso(スーパーユーザー)としてログインしているためERROR: parameter "log_connections" cannot be set after connection startALTER ROLE bob SET log_connections = off
アクセス

@dezso Drat。IIRCで資格を取得した理由の一部はわかりませんでした。
クレイグリンガー

1
@CraigRinger昨日試してみたが、可能だと思った-質問に賛成した:D
dezso

回答:


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の効果を確認する(2回目のログイン):

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.