folks,
ฉันสามารถใช้ความช่วยเหลือของคุณเพื่อทำให้การออกแบบการควบคุมการเข้าถึงผู้ใช้ของ Postgres ดีขึ้นและสอดคล้องกับแนวปฏิบัติที่ดีที่สุด ฉันกำลังช่วยเซิร์ฟเวอร์ Postgres ขนาดเล็กที่ผลิตออกมา แต่ฉันไม่ใช่ผู้ดูแลระบบ DB ดังนั้นฉันรู้ว่าเพียงพอที่จะเป็นอันตราย
มีเซิร์ฟเวอร์เดียวที่ติดตั้ง Postgres v9.2 หนึ่งตัว การติดตั้งนี้จะโฮสต์ฐานข้อมูลหลายฐานโดยแต่ละแห่งจะให้บริการ "ลูกค้า" ที่แตกต่างกันอย่างสมบูรณ์ ในคำอื่น ๆ ลูกค้า 1 จะไม่ไม่ควรใช้ฐานข้อมูล 2 และอื่น ๆ ในระหว่างการดำเนินงานปกติฐานข้อมูลจะถูกเข้าถึงโดยอินสแตนซ์ที่ตรงกันของ CakePHP ซึ่งอยู่ร่วมกันบนเซิร์ฟเวอร์เดียวกันกับ Postgres แม้ว่าอาจมีการปรับให้เหมาะสมที่สุดสำหรับการปรับใช้นี้ แต่ฉันก็สนใจบทบาท Psql เป็นส่วนใหญ่
จากสิ่งที่ฉันอ่านดูเหมือนว่าบทบาทสามประเภทจะสมเหตุสมผล:
- Superuser postgres ด้วยรหัสผ่านที่ไม่ใช่ค่าเริ่มต้น
- บทบาทผู้ดูแลระบบที่ไม่มีสิทธิ์ superuser สำหรับการบำรุงรักษาตามปกติการสร้างฐานข้อมูลการสำรองข้อมูลการคืนค่า ควรจะสามารถทำอะไรกับฐานข้อมูลลูกค้าทั้งหมด
- บทบาทของผู้ใช้ที่มีเพียงความสามารถในการ CRUD ในฐานข้อมูลนั้น ๆ สิทธิเพิ่มเติมเกี่ยวกับฐานข้อมูลของตนเองสามารถยอมรับได้หากการดำเนินการล้างข้อมูล
การนำการออกแบบไปใช้นั้นเป็นสิ่งที่ฉันมั่นใจน้อยมาก การเป็นเจ้าของฐานข้อมูล DB กับตารางและผู้ที่ควรสืบทอดจากใครคือโคลนเล็กน้อย ด้านล่างนี้คือฐานข้อมูลและผู้ใช้ของฉัน มีข้อมูลเพียงพอที่จะประเมินการใช้งานหรือไม่
Role name | Attributes | Member of
-----------+------------------------------------------------+-------------------
admin | Create role, Create DB | {user1, user2}
postgres | Superuser, Create role, Create DB | {}
user1 | | {}
user2 | | {}
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+---------+-------+-----------------------
admin | postgres | UTF8 | en_US | en_US | =Tc/postgres +
| | | | | postgres=CTc/postgres+
| | | | | admin=CTc/postgres
postgres | postgres | UTF8 | en_US | en_US |
template0 | postgres | UTF8 | en_US | en_US | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US | en_US | =c/postgres +
| | | | | postgres=CTc/postgres
user1 | admin | UTF8 | en_US | en_US | =Tc/admin +
| | | | | admin=CTc/admin +
| | | | | user1=CTc/admin
user2 | admin | UTF8 | en_US | en_US | =Tc/admin +
| | | | | admin=CTc/admin +
| | | | | user2=CTc/admin
เพื่อป้องกันการเชื่อมต่อและรหัสผ่านภายนอกในการล้าง pg_hba.conf จึงเป็นเช่นนี้:
local all all md5
host all all 127.0.0.1/32 md5
host all all ::1/128 md5