สิทธิพิเศษจะแสดงรายการใน \ l และเมื่อใด


10

สิทธิในการเข้าถึงถูกระบุโดย \ l เมื่อใดและจะไม่ใช้ สิทธิ์การเข้าถึงที่ระบุโดย \ l สามารถเปลี่ยนแปลงได้หลังจากการให้สิทธิ์และการเพิกถอน:

$ createuser -EP my_readonly
$ psql development
development=# \l
                                           List of databases
            Name             |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------------------------+----------+----------+-------------+-------------+-----------------------
 development                 | vagrant  | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | 
...
development=# grant usage on schema public to my_readonly;
development=# grant connect on database development to my_readonly;
development=# \l
                                             List of databases
            Name             |  Owner   | Encoding |   Collate   |    Ctype    |     Access privileges      
-----------------------------+----------+----------+-------------+-------------+----------------------------
 development                 | vagrant  | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =Tc/vagrant               +
                             |          |          |             |             | vagrant=CTc/vagrant       +
                             |          |          |             |             | my_readonly=c/vagrant
...
development=# revoke connect on database development from my_readonly;
REVOKE
development=# revoke usage on schema public from my_readonly;
REVOKE
development=# \l
                                           List of databases
            Name             |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------------------------+----------+----------+-------------+-------------+-----------------------
 development                 | vagrant  | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =Tc/vagrant          +
                             |          |          |             |             | vagrant=CTc/vagrant

ทำไมถึงเป็นอย่างนั้น? สถานะอะไรเปลี่ยนแปลง ฉันเชื่อว่าความสามารถของผู้ใช้ my_readonly ในการเชื่อมต่อไม่เปลี่ยนแปลงตลอดทั้งเซสชัน psql นี้ (เพราะฉันเดาว่าบทบาท Public มีสิทธิ์เชื่อมต่อ) แต่มีอะไรเปลี่ยนแปลงไปบ้าง: สิ่งนั้นคืออะไร

คำถามด้านข้าง: ฉันจะถามอย่างชัดเจนไม่ว่าจะเป็น postgres มหาชนในความเป็นจริงไม่ได้มีสิทธิพิเศษในการเชื่อมต่อ (พวกเขาอาจจะถูกเพิกถอน - ดูทำไมผู้ใช้ใหม่สามารถเลือกจากตารางใด ๆ ? )?

คำตอบ:


4

คำสั่งแบ็กสแลชใน psql เป็นทางลัดสำหรับเคียวรีหรือเคียวรีที่มองผ่านแค็ตตาล็อกระบบ \lคำสั่งลักษณะที่ข้อมูลในpg_catalog.pg_databaseเฉพาะแบบสอบถามนี้:

SELECT d.datname as "Name",
   pg_catalog.pg_get_userbyid(d.datdba) as "Owner",
   pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding",
   d.datcollate as "Collate",
   d.datctype as "Ctype",
   pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges"
FROM pg_catalog.pg_database d
ORDER BY 1;

คุณสามารถpsqlแสดงสิ่งที่มันใช้สำหรับคำสั่งแบ็กสแลชโดยส่ง-Eแฟล็กไปที่มันเมื่อคุณเรียกใช้บนบรรทัดคำสั่ง

หากสิทธิ์ในฐานข้อมูลหรือวัตถุอื่น ๆ ที่มีค่าเริ่มต้นที่ PostgreSQL สร้างพวกเขาด้วยที่คอลัมน์จะเป็น*acl NULLหากคุณเปลี่ยนค่าเริ่มต้นตามที่คุณมีคอลัมน์ ACL จะถูกเติมด้วยข้อมูลที่เกี่ยวข้องกับGRANTและ / หรือREVOKEคำสั่งที่คุณใช้

คุณสามารถดูการอนุญาต / ACL เฉพาะผ่าน\zหรือ\dp

ถ้าคุณอ่านเพิ่มเติมที่นี่:

http://www.postgresql.org/docs/9.4/static/sql-grant.html

หากคุณเลื่อนลง (หรือค้นหาคำpsql) คุณสามารถดูตารางที่แสดงวิธีตีความ ACL ที่คุณเห็นด้วย\lหรือในคอลัมน์ ACL

ตัวอย่างเช่น:

=Tc/vagrant

หมายความว่า PUBLIC (บทบาทโดยนัยที่มีบทบาททั้งหมด) มีสิทธิ์สร้างตารางชั่วคราวTและเชื่อมต่อcเนื่องจากสาย ACL =xxxxxหมายถึงสิทธิ์ที่ใช้กับrolname=xxxxสาธารณะในขณะที่ใช้กับบทบาทเฉพาะนั้น

งานนำเสนอจาก Dalibo นี้ควรช่วยชี้แจงเพิ่มเติมนี้: การจัดการสิทธิ์ใน PostgreSQL

หวังว่าจะช่วย =)

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