Có thể loại trừ người dùng cụ thể trong hoạt động đăng nhập của PostgreSQL không?


10

Tôi cần theo dõi hoạt động của người dùng trong cơ sở dữ liệu của chúng tôi. Tôi đã thiết lập các tham số sau postgresql.conf:

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

Tuy nhiên, tôi nhận ra rằng hầu hết các tệp nhật ký chứa đầy các câu lệnh do postgresngười dùng thực thi , được sử dụng bởi các tập lệnh tôi đã viết cho các tác vụ bảo trì: tính toán lại các khung nhìn cụ thể hóa, pg_dump, pg_restore, trích xuất các khung nhìn dưới dạng các tệp được lập bảng, v.v. tệp nhật ký có kích thước hơn 12 Mb.

Có cách nào để loại trừ hoạt động của người dùng cụ thể khỏi nhật ký không?


3
IIRC, ALTER USER ... SET log_connections = offv.v.
Craig Ringer

Rực rỡ, tôi sẽ làm điều đó.
Sébastien Clément

1
@CraigRinger đăng nhập với tư cách dezso(một siêu người dùng), tôi luôn nhận được ERROR: parameter "log_connections" cannot be set after connection startkhi cố gắngALTER ROLE bob SET log_connections = off
dezso

@dezso Drat. Một phần lý do tại sao tôi đủ điều kiện với IIRC ... không chắc chắn.
Craig Ringer

1
@CraigRinger Tôi đã thử điều này ngày hôm qua, nghĩ rằng điều đó là có thể - sau đó nêu lên câu hỏi: D
dezso

Câu trả lời:


5

Sử dụng ALTER ROLE ... SET parameter;lệnh, có thể điều chỉnh các tham số nhật ký cụ thể của người dùng. Lưu ý rằng tham số chỉ có hiệu lực sau khi đăng xuất.

Đặt log_min_duration_statement = -1 (lần đăng nhập đầu tiên):

bảng điều khiển 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

Kết quả trên nhật ký:

Lưu ý rằng trong phiên đó, tất cả các câu lệnh được hiển thị trong nhật ký ngay cả sau khi đặt 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

Xem hiệu ứng của log_min_duration_statement (lần đăng nhập thứ 2):

bảng điều khiển 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

Kết quả trên nhật ký:

Như dự kiến ​​không có tuyên bố nào được ghi lại.

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.