Làm cách nào để xem truy vấn của phiên khác trong pg_stat_activity mà không phải là siêu người dùng?


13

Tôi có một cơ sở dữ liệu Postgresql 9.2. Hai người dùng được tạo trên cơ sở dữ liệu này. Khi tôi thực hiện truy vấn sau dưới dạng siêu người dùng, tôi có thể thấy mọi thứ.

select * from pg_stat_activity

Tuy nhiên, liệu có thể đạt được kết quả tương tự mà không được kết nối như siêu người dùng?

Tôi nên cấp / tạo đặc quyền / vai trò nào để có kết quả mà siêu người dùng có thể nhìn thấy?


Tại thời điểm này, không có quyền cấp, nó được mã hóa thành siêu người dùng. Điều đó đã được thảo luận trong danh sách gửi thư gần đây và có thể thay đổi trong 9.5 nếu ai đó tìm thấy thời gian để làm việc với nó.
Craig Ringer

Câu trả lời:


20

Tại thời điểm này, không có quyền cấp, nó được mã hóa thành siêu người dùng. Điều đó đã được thảo luận trong danh sách gửi thư gần đây và có thể thay đổi trong 9.5 nếu ai đó tìm thấy thời gian để làm việc với nó.

Như một giải pháp thay thế, bạn có thể tạo một SECURITY DEFINERchức năng thuộc sở hữu của siêu người dùng và chạy truy vấn bạn muốn. Điều này sẽ cho phép những người không phải siêu nhân nhìn thấy nội dung của pg_stat_activitybằng cách gọi hàm.

Ví dụ: chạy như một siêu người dùng:

CREATE FUNCTION get_sa() RETURNS SETOF pg_stat_activity AS
$$ SELECT * FROM pg_catalog.pg_stat_activity; $$
LANGUAGE sql
VOLATILE
SECURITY DEFINER;

CREATE VIEW pg_stat_activity_allusers AS SELECT * FROM get_sa();

GRANT SELECT ON pg_stat_activity_allusers TO public;

Lưu ý rằng quyền truy cập miễn phí pg_stat_activitybị hạn chế vì một lý do. Có thể theo dõi thông tin nhạy cảm từ các truy vấn của người khác - ví dụ, hãy tưởng tượng nếu người dùng khác đang sử dụng pgcrypto. Thay vì cấp quyền cho publicbạn, bạn chỉ nên cấp chúng cho một người dùng hoặc vai trò cụ thể là đóng vai trò là người dùng thay thế để theo dõi.


Cảm ơn! Chỉ cố gắng tìm ra cách cấp quyền cho tài khoản màn hình để đọc từ pg_stat_activity mà không cấp SUPERUSER.
epic_fil

3

Bắt đầu với PostgreSQL 10, bạn có thể cấp vai trò pg_read_all_statsđể đạt được kết quả mong muốn.

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.