เหตุใดผู้ใช้ใหม่จึงสามารถสร้างตารางใน PostgreSQL ได้


13

ฉันติดตามสองบทเรียนเพื่อสร้าง DB ด้วย:

  1. ลิงค์ผู้ใช้ที่มีสิทธิ์อย่างสมบูรณ์
  2. ลิงก์ผู้ใช้แบบอ่านอย่างเดียว

จากนั้นฉันได้รับคำแนะนำจากบทสอนของ CJ Estel ที่ระบุว่า "คุณอาจได้รับมรดกความสามารถในการสร้างตารางแม้ว่าเราจะไม่ได้มอบให้กับผู้ใช้ใหม่ของเราอย่างชัดเจน" ผู้ใช้แบบอ่านอย่างเดียวสามารถสร้างและเป็นเจ้าของตารางได้!

CJ Estel ได้ชี้ให้เห็นถึงต้นตอของปัญหาเป็นอย่างดีนั่นคือฐานข้อมูลแม่แบบ แต่ความสามารถในการสร้างตารางทำลายบทเรียนมากที่สุดที่คุณได้รับจาก googling "อ่านเท่านั้น postgres ผู้ใช้" รวมถึงหนึ่งโฮสต์บน postgresql.org ผู้ใช้ของคุณมีสิทธิ์มากกว่าแบบอ่านอย่างเดียว!

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

คำตอบ:


13

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(ตารางในpublicschema) ฉันจองผู้เป็นเจ้าของ

เป็นตัวเลือกที่ทำมานานแล้วและมันค่อนข้างยากที่จะเปลี่ยนตอนนี้


เนื่องจากมีข้อร้องเรียนทั่วไปที่ยากเกินกว่าที่จะเริ่มต้นกับ PostgreSQL เนื่องจากคุณต้องสร้างบัญชีผู้ใช้และมักต้องการสร้างฐานข้อมูลด้วย ทำไมเราไม่เพียงสร้างมันขึ้นมาโดยอัตโนมัติและตั้งค่าเริ่มต้นเป็น 'ความไว้วางใจ' ในโหมด auth เพื่อให้ง่าย? ทำไมไม่ได้postgresเริ่มต้นที่จะมีผู้ใช้รหัสผ่านpostgres? ทำไมเราไม่เพียงแค่สร้างผู้ใช้โดยอัตโนมัติหากพวกเขามีอยู่ในระบบปฏิบัติการ? เป็นต้น

มีปัญหาการใช้งานจริงบางอย่างสำหรับผู้ใช้ใหม่โดยเฉพาะผู้คนส่วนใหญ่ไม่รู้ว่าpeerการรับรองความถูกต้องคืออะไรหรือทำไมเพียงแค่ทำงานpsqlหลังจากติดตั้ง PostgreSQL บอกพวกเขาว่าไม่มีผู้ใช้ชื่อที่พวกเขาลงชื่อเข้าใช้

นอกจากนี้ยังยุ่งที่pg_hba.confเป็นไฟล์กำหนดค่า แต่ผู้ใช้จะถูกสร้างขึ้นในระดับ SQL การแยกนี้ทำให้ผู้ใช้สับสน

แม้ว่าจะมีหลายสิ่งหลายอย่างที่มีการประนีประนอมระหว่างค่าเริ่มต้นที่ปลอดภัยและค่าเริ่มต้นที่ง่ายซึ่งโครงการไม่เคยทำให้ทุกคนมีความสุข


ดังนั้นฉันจึงเรียกใช้revoke create on database [databasename] from [username];และตอนนี้ฐานข้อมูลเป็นแบบอ่านอย่างเดียวสำหรับ [ชื่อผู้ใช้] ขวา? ฉันจะกลับมาที่คำตอบนี้อีกครั้งเมื่อฉันได้อ่านหนังสือ Postgres ดีๆ :)
Jesvin Jose

2
ในการตอบกลับความคิดเห็นก่อนหน้านี้มันไม่มี
Jesvin Jose
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.