ก่อนอื่นคุณจะต้องสามารถเชื่อมต่อกับฐานข้อมูลเพื่อเรียกใช้แบบสอบถาม สามารถทำได้โดย
REVOKE CONNECT ON DATABASE your_database FROM PUBLIC;
GRANT CONNECT
ON DATABASE database_name
TO user_name;
REVOKE
เป็นสิ่งจำเป็นเพราะ
คำสำคัญสาธารณะหมายถึงสิทธิพิเศษที่จะมอบให้กับบทบาททั้งหมดรวมถึงสิทธิ์ที่อาจสร้างขึ้นในภายหลัง PUBLIC อาจถูกมองว่าเป็นกลุ่มที่นิยามโดยนัยซึ่งรวมถึงบทบาททั้งหมดเสมอ บทบาทเฉพาะใด ๆ จะมีผลรวมของสิทธิพิเศษที่มอบให้โดยตรงสิทธิพิเศษที่มอบให้กับบทบาทใดก็ตามที่สมาชิกปัจจุบันและสิทธิประโยชน์ที่มอบให้แก่สาธารณะ
หากคุณต้องการ จำกัด ผู้ใช้ของคุณไปยังคำสั่ง DML คุณต้องทำมากกว่านั้น:
REVOKE ALL
ON ALL TABLES IN SCHEMA public
FROM PUBLIC;
GRANT SELECT, INSERT, UPDATE, DELETE
ON ALL TABLES IN SCHEMA public
TO user_name;
สิ่งเหล่านี้สมมติว่าคุณจะมีเพียงหนึ่งสกีมา (ซึ่งมีชื่อว่า 'สาธารณะ' โดยค่าเริ่มต้น)
ดังที่แจ็คดักลาสชี้ให้เห็นข้างต้นเท่านั้นให้สิทธิ์สำหรับตารางที่มีอยู่แล้ว เพื่อให้บรรลุผลเหมือนกันสำหรับตารางในอนาคตคุณต้องกำหนดสิทธิ์เริ่มต้น :
ALTER DEFAULT PRIVILEGES
FOR ROLE some_role -- Alternatively "FOR USER"
IN SCHEMA public
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO user_name;
นี่some_role
คือบทบาทที่สร้างตารางในขณะที่user_name
เป็นผู้ที่ได้รับสิทธิ์ การกำหนดสิ่งนี้คุณจะต้องเข้าสู่ระบบในฐานะsome_role
สมาชิกของหรือ
และในที่สุดคุณต้องทำแบบเดียวกันกับลำดับ (ขอบคุณ PlaidFan สำหรับการชี้ออก) - ที่นี่เป็นUSAGE
สิทธิ์พิเศษที่คุณต้องการ
FOR some_role
เป็นส่วนสำคัญที่ฉันไม่ได้ทำเพื่อสร้างตารางของฉันในภายหลัง แต่ฉันไม่จำเป็นต้องเข้าสู่ระบบเพราะsome_role
มันใช้งานได้เช่นกันหากฉันเรียกใช้แบบสอบถามเป็นผู้postgres
ใช้ที่เป็นผู้ดูแลระบบเริ่มต้น