ให้สิทธิ์น้อยที่สุดสำหรับการเข้าถึงตารางเดี่ยวแบบอ่านอย่างเดียวบน PostgreSQL


10

ต่อไปนี้เป็นรายการของคำสั่งที่ดูเหมือนว่าจะทำงานเพื่อสร้างผู้ใช้ใหม่ (เข้าสู่ระบบ) และให้สิทธิ์การเข้าถึงแบบอ่านอย่างเดียวสำหรับหนึ่งตารางที่ระบุบน PostgreSQL

สมมติว่าคำสั่งเหล่านี้จะถูกดำเนินการในการเข้าสู่ระบบด้วยสิทธิ์ที่เพียงพอ (เช่นการpostgresเข้าสู่ระบบในการติดตั้งเริ่มต้น)

CREATE ROLE user_name NOSUPERUSER NOCREATEDB 
NOCREATEROLE NOINHERIT LOGIN PASSWORD 'pwd' VALID UNTIL 'infinity';

ตอนนี้ฉันต้องการอนุญาตselectบนโต๊ะtab_abcในฐานข้อมูลdb_xyzดังนั้นที่นี่มันไป (ฐานข้อมูลdb_xyzถูกเลือกเป็นปัจจุบันผ่าน PgAdmin หรืออะไรทำนองนั้น):

grant select on tab_abc to user_name;

คำถามคือ: นี่คือเพียงพอหรือควรจะมีเงินทุนมากขึ้น (ฐานข้อมูลconnect, usageอาจจะ)?

คำสั่งเหล่านี้ดูเหมือนจะใช้งานได้สำหรับฉัน แต่การติดตั้งเริ่มต้นของฉันมีการตั้งค่าความปลอดภัยเริ่มต้น ฉันควรเพิ่มอะไรเพิ่มเติมหากผู้ดูแลระบบเซิร์ฟเวอร์กำหนดค่าความปลอดภัยที่สูงขึ้น

มันดูเหมือนว่าฉันไม่ต้องการที่จะให้connectหรือusage- จะ implicite ว่าในขณะที่การอนุญาตให้select? เป็นเช่นนั้นเสมอหรือไม่

คำตอบ:


12

คำถามคือ: เพียงพอหรือควรจะมีเพิ่มเติม (เชื่อมต่อฐานข้อมูลอาจใช้)

การรักษาความปลอดภัยอาจแข็งจากค่าเริ่มต้นส่วนใหญ่ในประเด็นเหล่านี้:

  • pg_hba.confไฟล์ มันกรองการเชื่อมต่อก่อนที่จะพิจารณาสิทธิ์ฐานข้อมูลใด ๆ ค่าเริ่มต้นค่อนข้างเปิดสำหรับการเชื่อมต่อภายในเครื่อง แต่อาจถูก จำกัด ไว้ในรายการฐานข้อมูลชื่อผู้ใช้และต้นกำเนิดเครือข่ายที่ชัดเจน

  • สิทธิ์สำหรับสาธารณะบทบาทหลอกที่ทุกคนมี PUBLICผู้ใช้สามารถเชื่อมต่อโดยปริยายเฉพาะในกรณีที่การเชื่อมต่อสิทธิ์จะได้รับ ดูผู้ใช้ที่สร้างสามารถเข้าถึงฐานข้อมูลทั้งหมดใน PostgreSQL โดยไม่ต้องทุนใด ฐานข้อมูลอาจมีการเพิกถอนสิทธิ์ทั้งหมดจากสาธารณะ ดูถอนในเอกสารสำหรับรุ่น PostgreSQL ที่คุณใช้งานอยู่

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

ในกรณีที่มีการลบค่าเริ่มต้นเหล่านี้เพื่ออ่านหนึ่งตารางผู้ใช้ใหม่ควรได้รับ:

GRANT CONNECT ON DATABASE dbname TO username;

ที่ระดับฐานข้อมูล:

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