GRANT
บนวัตถุต่างๆจะแยกจากกัน GRANT
ในฐานข้อมูลไม่มีGRANT
สิทธิ์ในสคีมาภายใน ในทำนองเดียวกันGRANT
การใช้สคีมาไม่ได้ให้สิทธิ์ในตารางภายใน
หากคุณมีสิทธิ์SELECT
จากตาราง แต่ไม่มีสิทธิ์ดูตารางในสคีมาที่มีอยู่คุณจะไม่สามารถเข้าถึงตารางได้
การทดสอบสิทธิ์จะทำตามลำดับ:
Do you have `USAGE` on the schema?
No: Reject access.
Yes: Do you also have the appropriate rights on the table?
No: Reject access.
Yes: Check column privileges.
ความสับสนของคุณอาจเกิดขึ้นจากข้อเท็จจริงที่ว่าpublic
สคีมามีค่าเริ่มต้นGRANT
ของสิทธิ์ทั้งหมดในบทบาทpublic
ซึ่งผู้ใช้ / กลุ่มทุกคนเป็นสมาชิก ดังนั้นทุกคนจึงมีการใช้งานสคีมานั้นอยู่แล้ว
วลี:
(สมมติว่ามีคุณสมบัติตรงตามข้อกำหนดสิทธิพิเศษของออบเจ็กต์ด้วย)
กำลังบอกว่าคุณต้องมีUSAGE
บนสคีมาเพื่อใช้อ็อบเจ็กต์ภายในนั้น แต่การมีUSAGE
สคีมานั้นไม่เพียงพอที่จะใช้อ็อบเจกต์ภายในสคีมาคุณต้องมีสิทธิ์ในอ็อบเจ็กต์ด้วย
มันเหมือนต้นไม้ไดเรกทอรี หากคุณสร้างไดเร็กทอรีที่somedir
มีไฟล์somefile
อยู่ภายในให้ตั้งค่าเพื่อให้เฉพาะผู้ใช้ของคุณเท่านั้นที่สามารถเข้าถึงไดเร็กทอรีหรือไฟล์ (โหมดrwx------
บน dir โหมดrw-------
บนไฟล์) ไม่มีใครสามารถแสดงรายการไดเร็กทอรีเพื่อดูว่ามีไฟล์อยู่
หากคุณให้สิทธิ์การอ่านทั่วโลกในไฟล์ (โหมดrw-r--r--
) แต่ไม่เปลี่ยนการอนุญาตไดเร็กทอรีก็จะไม่สร้างความแตกต่าง ไม่มีใครสามารถดูไฟล์เพื่ออ่านได้เนื่องจากไม่มีสิทธิ์แสดงรายการไดเร็กทอรี
หากคุณตั้งค่าrwx-r-xr-x
ในไดเร็กทอรีแทนการตั้งค่าเพื่อให้บุคคลอื่นสามารถแสดงรายการและสำรวจไดเร็กทอรี แต่ไม่เปลี่ยนสิทธิ์ของไฟล์ผู้อื่นสามารถแสดงรายการไฟล์ได้ แต่ไม่สามารถอ่านได้เนื่องจากไม่มีสิทธิ์เข้าถึงไฟล์
คุณต้องตั้งค่าสิทธิ์ทั้งสองอย่างเพื่อให้ผู้อื่นสามารถดูไฟล์ได้
สิ่งเดียวกันใน Pg. คุณต้องมีทั้งUSAGE
สิทธิ์สคีมาและสิทธิ์ออบเจ็กต์เพื่อดำเนินการกับออบเจ็กต์เช่นSELECT
จากตาราง
(คล้ายคลึงตกลงเล็กน้อยในการที่ PostgreSQL ไม่ได้มีการรักษาความปลอดภัยระดับแถว ๆ เพื่อให้ผู้ใช้ยังสามารถ "เห็น" ว่าตารางที่มีอยู่ในสคีมาโดยSELECT
ไอเอ็นจีจากpg_class
โดยตรง. พวกเขาไม่สามารถโต้ตอบกับมันในทางใดทางหนึ่ง แม้ว่าจะเป็นเพียงส่วน "รายการ" ที่ไม่เหมือนกัน)
CREATE EXTENSION
. เป็นปัญหาเดียวกันกับไฟล์ที่สร้างบน Linux ไม่su
มากก็น้อยในขณะที่คุณ จะเป็นการดีถ้ามีประเภทของsudo -e
คำสั่งใน pqsl