Khi nào các đặc quyền được liệt kê trong \ l và khi nào không?


10

Khi nào các đặc quyền truy cập được liệt kê bởi \ l và khi nào thì không? Các đặc quyền truy cập được liệt kê bởi \ l có thể thay đổi sau khi cấp và thu hồi:

$ 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

Tại sao vậy? Nhà nước nào thay đổi? Tôi tin rằng khả năng kết nối của người dùng my_readonly không thay đổi trong toàn bộ phiên psql này (vì tôi đoán vai trò CÔNG KHAI đã kết nối đặc quyền), nhưng rõ ràng có gì đó đã thay đổi: đó là gì?

Side câu hỏi: làm thế nào tôi có thể rõ ràng yêu cầu postgres dù CÔNG trên thực tế không có quyền kết nối (có thể họ đã bị thu hồi - xem Tại sao một người dùng mới có thể chọn từ bất kỳ bảng? )?

Câu trả lời:


4

Các lệnh dấu gạch chéo ngược trong psql là các phím tắt cho một truy vấn hoặc truy vấn xem qua các danh mục hệ thống. Các \llệnh nhìn vào thông tin trong pg_catalog.pg_database, cụ thể, truy vấn này:

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;

Bạn có thể psqlhiển thị những gì nó đang sử dụng cho các lệnh dấu gạch chéo ngược bằng cách chuyển -Ecờ cho nó khi bạn gọi nó trên dòng lệnh.

Nếu các quyền trên cơ sở dữ liệu hoặc đối tượng khác là mặc định mà PostgreQuery tạo ra chúng, thì *aclcột sẽ là NULL. Nếu bạn thay đổi mặc định, như bạn có, cột ACL sẽ được điền với thông tin liên quan đến GRANTvà / hoặc các REVOKEcâu lệnh bạn đã chạy.

Bạn có thể thấy các quyền / ACL cụ thể thông qua \zhoặc\dp

Nếu bạn đọc thêm ở đây:

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

Nếu bạn cuộn xuống, (hoặc tìm kiếm từ psql), bạn có thể nhìn vào bảng chỉ cho bạn cách diễn giải các ACL mà bạn thấy với \lhoặc trong một cột ACL.

Ví dụ:

=Tc/vagrant

có nghĩa là PUBLIC (vai trò ẩn chứa tất cả các vai trò) có quyền tạo các bảng tạm thời Tvà kết nối c, bởi vì dòng ACL =xxxxxbiểu thị các quyền được áp dụng cho PUBLIC, trong khi rolname=xxxxáp dụng cho vai trò cụ thể đó.

Bài trình bày này từ Dalibo cũng sẽ giúp làm rõ điều này hơn nữa: Quyền quản lý trong PostgreQuery

Mong rằng sẽ giúp. =)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.