รุ่นด่วน:
ฉันควรใช้คำสั่งใดเพื่อให้เจ้าของฐานข้อมูลอนุญาตให้เข้าถึงตารางในฐานข้อมูลนี้และสามารถทำได้จากบัญชีของเจ้าของรายนั้น
รุ่นที่ยาวกว่า:
ฉันกำลังสร้างฐานข้อมูลบน RDS ฉันมีผู้ใช้ 'รูท' ที่ฉันกำหนดค่าไว้กับ Amazon
Amazon สร้างบทบาทกลุ่ม 'rds_superuser' โดยอัตโนมัติซึ่งมีสิทธิพิเศษมาก แต่ไม่ใช่ superuser จริง ๆ
ฉันกำลังสร้างฐานข้อมูลและผู้ใช้สำหรับแอปพลิเคชันดังต่อไปนี้:
create database master_integration;
CREATE ROLE master_application LOGIN ENCRYPTED PASSWORD '...' VALID UNTIL 'infinity';
GRANT ALL ON DATABASE master_integration TO GROUP rds_superuser WITH GRANT OPTION;
GRANT ALL ON DATABASE master_integration TO GROUP master_application;
\c master_integration;
ALTER DEFAULT PRIVILEGES GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES TO rds_superuser;
ฉันอัปเดตสคริปต์นี้เพื่อสะท้อนถึงข้อเสนอแนะโดย Craig Ringer เกี่ยวกับวิธีการจัดการสิ่งนี้
เมื่อแอปเชื่อมต่อ (ด้วยข้อมูลประจำตัว master_application) แอปจะสร้าง (และเป็นเจ้าของ) ตาราง
ปัญหาของฉันคือฉันไม่สามารถใช้การเข้าสู่ระบบในระดับผู้ดูแล (รูต) เพื่อเรียกใช้คิวรีได้เนื่องจากผู้ใช้นั้นไม่มีสิทธิ์บนตาราง
ฉันสามารถแก้ไขปัญหานี้มาก่อนด้วยการเรียกใช้สิ่งต่อไปนี้จากบัญชีแอปพลิเคชัน:
GRANT ALL privileges ON ALL TABLES IN SCHEMA public to rds_superuser;
แต่ดูเหมือนว่าแฮ็คจะมีผู้ใช้รองให้สิทธิ์ไพรเวตกลับไปยังผู้ใช้ที่เป็นผู้ดูแลระบบ
ดังนั้น ... มีคำสั่งที่ฉันสามารถเรียกใช้ก่อนหรือหลังฉันสร้างตารางจากแอปพลิเคชันที่จะให้แน่ใจว่าเจ้าของฐานข้อมูลสามารถเข้าถึงตารางภายในฐานข้อมูลหรือไม่
อัปเดตหลังจากพยายามแก้ไขสิทธิ์เริ่มต้นอีกครั้ง ...
สิ่งนี้ยังคงไม่อนุญาตให้เข้าถึงตาราง ฉันเห็นว่ามันถูกแนะนำในที่อื่นและมันก็สมเหตุสมผลดี แต่มันไม่ได้ผลสำหรับฉัน จากเปลือก psql:
master_integration=> \ddp
Default access privileges
Owner | Schema | Type | Access privileges
------------------+--------+-------+-------------------------------------------
integration_root | | table | integration_root=arwdDxt/integration_root+
| | | rds_superuser=arwdDxt/integration_root
(1 row)
master_integration=> \dp users
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+-------+-------+-------------------+--------------------------
public | users | table | |
(1 row)
Integration_root เป็นผู้ใช้ superuser-ish ของฉันและผู้ใช้เป็นตารางภายในฐานข้อมูลของฉัน
ปรับปรุง
ฉันได้รับการตอบกลับที่ไร้ประโยชน์จากคนที่ Amazon
พวกเขาขอให้ฉันโทรหา ALTER DEFAULT PRIVILEGES จากล็อกอิน master_application ขณะนี้อาจใช้งานได้ แต่จะไม่ตอบคำถามของฉัน (ซึ่งฉันจะทำให้สิ่งนี้เกิดขึ้นได้อย่างไรจากบัญชี rds_superuser เท่านั้น)
ฉันขอให้พวกเขาชี้แจงเรื่องนี้และพวกเขาก็จากไป