TL; DR: ผู้ใช้ใหม่สามารถสร้างตารางในpublic
สคีมาได้เพราะคนบ่นว่ามันยากเกินไปเมื่อพวกเขาทำไม่ได้
หากคุณไม่ชอบค่าเริ่มต้นคุณควรสร้างฐานข้อมูลเทมเพลตใหม่ด้วยการกำหนดค่าเริ่มต้นที่คุณต้องการ ตัวอย่างเช่นคุณอาจ:
DROP SCHEMA public;
หรือ
REVOKE ALL ON SCHEMA public FROM public;
GRANT USAGE ON SCHEMA public TO public;
ในเทมเพลตของคุณ
หากคุณต้องการให้public
ผู้ใช้ไม่มีสิทธิ์ในฐานข้อมูลคุณควรเพิ่มเติม:
REVOKE ALL ON DATABASE mydbname FROM public;
GRANT CONNECT ON DATABASE mydbname TO public;
เพื่อให้public
ผู้ใช้ไม่สามารถสร้างสกีมาหรือใช้ตารางชั่วคราว
โดยส่วนตัวถ้าฉันออกแบบสิ่งนี้ฉันจะให้TEMP
สิทธิ์แก่ผู้ใช้ในฐานข้อมูลโดยค่าเริ่มต้น แต่ไม่ใช่CREATE
(schema ในฐานข้อมูล) หรือCREATE
(ตารางในpublic
schema) ฉันจองผู้เป็นเจ้าของ
เป็นตัวเลือกที่ทำมานานแล้วและมันค่อนข้างยากที่จะเปลี่ยนตอนนี้
เนื่องจากมีข้อร้องเรียนทั่วไปที่ยากเกินกว่าที่จะเริ่มต้นกับ PostgreSQL เนื่องจากคุณต้องสร้างบัญชีผู้ใช้และมักต้องการสร้างฐานข้อมูลด้วย ทำไมเราไม่เพียงสร้างมันขึ้นมาโดยอัตโนมัติและตั้งค่าเริ่มต้นเป็น 'ความไว้วางใจ' ในโหมด auth เพื่อให้ง่าย? ทำไมไม่ได้postgres
เริ่มต้นที่จะมีผู้ใช้รหัสผ่านpostgres
? ทำไมเราไม่เพียงแค่สร้างผู้ใช้โดยอัตโนมัติหากพวกเขามีอยู่ในระบบปฏิบัติการ? เป็นต้น
มีปัญหาการใช้งานจริงบางอย่างสำหรับผู้ใช้ใหม่โดยเฉพาะผู้คนส่วนใหญ่ไม่รู้ว่าpeer
การรับรองความถูกต้องคืออะไรหรือทำไมเพียงแค่ทำงานpsql
หลังจากติดตั้ง PostgreSQL บอกพวกเขาว่าไม่มีผู้ใช้ชื่อที่พวกเขาลงชื่อเข้าใช้
นอกจากนี้ยังยุ่งที่pg_hba.conf
เป็นไฟล์กำหนดค่า แต่ผู้ใช้จะถูกสร้างขึ้นในระดับ SQL การแยกนี้ทำให้ผู้ใช้สับสน
แม้ว่าจะมีหลายสิ่งหลายอย่างที่มีการประนีประนอมระหว่างค่าเริ่มต้นที่ปลอดภัยและค่าเริ่มต้นที่ง่ายซึ่งโครงการไม่เคยทำให้ทุกคนมีความสุข
revoke create on database [databasename] from [username];
และตอนนี้ฐานข้อมูลเป็นแบบอ่านอย่างเดียวสำหรับ [ชื่อผู้ใช้] ขวา? ฉันจะกลับมาที่คำตอบนี้อีกครั้งเมื่อฉันได้อ่านหนังสือ Postgres ดีๆ :)