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, 뷰를 테이블 형식의 파일로 추출 등. 결과는 매일입니다. 크기가 12MB 이상인 로그 파일.

로그에서 특정 사용자의 활동을 제외시키는 방법이 있습니까?


3
IIRC ALTER USER ... SET log_connections = off
Craig Ringer

브릴리언트, 내가 할게
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

@dezso Drat. IIRC 자격이 된 이유 중 일부는 확실하지 않았습니다.
Craig Ringer

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 (두 번째 로그인)의 효과 확인 :

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.