Không có chế độ xem nào như vậy ngoài hộp, nhưng dữ liệu cần thiết để tạo nó nằm trong danh mục hệ thống:
http://www.postgresql.org/docs/current/static/catalogs.html
Ví dụ:có một relacl
trường trong pg_class
:
select oid::regclass, relacl from pg_class;
Có các trường tương tự trong các danh mục khác, cụ thể là typacl
trong pg_type
và proacl
trong pg_proc
.
Có lẽ bạn sẽ muốn sử dụng thêm hai danh mục, đó là pg_authid
để biết vai trò nào có đặc quyền người dùng cấp cao và pg_auth_members
để biết ai có vai trò gì.
(pg_default_acl
chỉ được sử dụng trong quá trình tạo đối tượng, vì vậy không hữu ích.)
Có một số chức năng bên trong liên quan đến aclitem có thể hữu ích trong việc tạo chế độ xem. Bạn có thể liệt kê chúng trong psql
như vậy:
\df+ *acl*
Cụ thể là aclexplode()
. Ví dụ sau hy vọng sẽ đủ để giúp bạn bắt đầu:
select oid::regclass,
(aclexplode(relacl)).grantor,
(aclexplode(relacl)).grantee,
(aclexplode(relacl)).privilege_type,
(aclexplode(relacl)).is_grantable
from pg_class
where relacl is not null;
Nó có thể được tối ưu hóa bằng cách mở rộng các hàng acl trước, ví dụ:
select oid::regclass,
aclitem.grantee
from (select oid, aclexplode(relacl) as aclitem from pg_class) sub
Nó sẽ đưa bạn đến thẳng kết quả mong muốn.
Trong chừng mực mà tôi biết, thì điều đó cũng tốt bằng việc sử dụng các công cụ tích hợp sẵn. (Đương nhiên, bạn có thể viết nhóm toán tử của riêng mình bằng C nếu bạn muốn cố gắng tối ưu hóa điều này hơn nữa.)
Đối với các câu hỏi bổ sung của bạn, tôi e rằng chúng chỉ có thể được trả lời bởi một số ít người trên thế giới, hay còn gọi là chính các nhà phát triển cốt lõi. Họ tham gia vào danh sách tin tặc pg thường xuyên hơn họ ở đây.