วิธีดูคิวรีของเซสชันอื่นใน pg_stat_activity โดยไม่ต้องเป็นผู้ใช้ขั้นสูง


13

ฉันมีฐานข้อมูล Postgresql 9.2 ผู้ใช้สองคนถูกสร้างบนฐานข้อมูลนี้ เมื่อฉันทำแบบสอบถามต่อไปนี้เป็น superuser ฉันสามารถเห็นทุกสิ่ง

select * from pg_stat_activity

อย่างไรก็ตามเป็นไปได้หรือไม่ที่จะได้ผลลัพธ์เดียวกันโดยไม่ต้องเชื่อมต่อเป็น superuser

ฉันควรอนุญาต / สร้างสิทธิ์ / บทบาทใดเพื่อให้ได้ผลลัพธ์ที่ผู้ใช้ระดับสูงเห็นได้


ณ จุดนี้ไม่มีสิทธิ์ที่จะให้มัน hardcoded เพื่อ superuser มีการพูดคุยกันในรายการส่งเมลเมื่อเร็ว ๆ นี้และอาจมีการเปลี่ยนแปลงใน 9.5 ถ้ามีคนหาเวลาทำงานให้
Craig Ringer

คำตอบ:


21

ณ จุดนี้ไม่มีสิทธิ์ที่จะให้มัน hardcoded เพื่อ superuser มีการพูดคุยกันในรายการส่งเมลเมื่อเร็ว ๆ นี้และอาจมีการเปลี่ยนแปลงใน 9.5 ถ้ามีคนหาเวลาทำงานให้

คุณสามารถสร้างSECURITY DEFINERฟังก์ชันที่ superuser เป็นเจ้าของและเรียกใช้คิวรีที่คุณต้องการ สิ่งนี้จะอนุญาตให้ผู้ที่ไม่ใช่ผู้ใช้ขั้นสูงสามารถดูเนื้อหาของpg_stat_activityโดยเรียกใช้ฟังก์ชัน

เช่นทำงานเป็น superuser:

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;

โปรดทราบว่าการเข้าถึงฟรีpg_stat_activityถูก จำกัด ด้วยเหตุผล เป็นไปได้ที่จะสอดแนมข้อมูลที่ละเอียดอ่อนจากการสอบถามของคนอื่น - ลองจินตนาการว่าหากผู้ใช้รายอื่นกำลังใช้ pgcrypto แทนที่จะให้สิทธิ์แก่publicคุณคุณควรให้สิทธิ์เฉพาะกับผู้ใช้หรือบทบาทเฉพาะที่จะทำหน้าที่เป็นผู้ใช้ตัวแทนในการตรวจสอบ


ขอบคุณ! เป็นเพียงการพยายามที่จะคิดออกว่าจะให้สิทธิ์บัญชีตรวจสอบเพื่ออ่านจาก pg_stat_activity โดยไม่ให้สิทธิ์ SUPERUSER
epic_fil

3

เริ่มต้นด้วย PostgreSQL 10 คุณสามารถกำหนดบทบาทpg_read_all_statsเพื่อให้ได้ผลลัพธ์ตามที่ต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.