diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index fc94a73a54..ca8b88a682 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -510,6 +510,484 @@ FROM pg_shseclabel l JOIN pg_authid rol ON l.classoid = rol.tableoid AND l.objoid = rol.oid; +CREATE VIEW pg_permissions AS + SELECT + a.regclass, + a.obj_desc, + grantor.rolname AS grantor, + grantee.rolname AS grantee, + a.privilege_type, + a.is_grantable + FROM + ( + SELECT + 'pg_attribute'::regclass + AS regclass, + pg_describe_object('pg_class'::regclass,aa.attrelid,aa.attnum) + AS obj_desc, + (aclexplode(aa.attacl)).* + FROM pg_catalog.pg_attribute AS aa + ) AS a + JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor + JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee +UNION ALL + SELECT + a.regclass, + a.obj_desc, + grantor.rolname AS grantor, + grantee.rolname AS grantee, + a.privilege_type, + a.is_grantable + FROM + ( + SELECT + 'pg_class'::regclass + AS regclass, + pg_describe_object('pg_class'::regclass,aa.oid,0) + AS obj_desc, + (aclexplode(aa.relacl)).* + FROM pg_catalog.pg_class AS aa + ) AS a + JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor + JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee +UNION ALL + SELECT + a.regclass, + a.obj_desc, + grantor.rolname AS grantor, + grantee.rolname AS grantee, + a.privilege_type, + a.is_grantable + FROM + ( + SELECT + 'pg_database'::regclass + AS regclass, + pg_describe_object('pg_database'::regclass,aa.oid,0) + AS obj_desc, + (aclexplode(aa.datacl)).* + FROM pg_catalog.pg_database AS aa + ) AS a + JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor + JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee +UNION ALL + SELECT + a.regclass, + a.obj_desc, + grantor.rolname AS grantor, + grantee.rolname AS grantee, + a.privilege_type, + a.is_grantable + FROM + ( + SELECT + 'pg_default_acl'::regclass + AS regclass, + pg_describe_object('pg_default_acl'::regclass,aa.oid,0) + AS obj_desc, + (aclexplode(aa.defaclacl)).* + FROM pg_catalog.pg_default_acl AS aa + ) AS a + JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor + JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee +UNION ALL + SELECT + a.regclass, + a.obj_desc, + grantor.rolname AS grantor, + grantee.rolname AS grantee, + a.privilege_type, + a.is_grantable + FROM + ( + SELECT + 'pg_foreign_data_wrapper'::regclass + AS regclass, + pg_describe_object('pg_foreign_data_wrapper'::regclass,aa.oid,0) + AS obj_desc, + (aclexplode(aa.fdwacl)).* + FROM pg_catalog.pg_foreign_data_wrapper AS aa + ) AS a + JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor + JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee +UNION ALL + SELECT + a.regclass, + a.obj_desc, + grantor.rolname AS grantor, + grantee.rolname AS grantee, + a.privilege_type, + a.is_grantable + FROM + ( + SELECT + 'pg_foreign_server'::regclass + AS regclass, + pg_describe_object('pg_foreign_server'::regclass,aa.oid,0) + AS obj_desc, + (aclexplode(aa.srvacl)).* + FROM pg_catalog.pg_foreign_server AS aa + ) AS a + JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor + JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee +UNION ALL + SELECT + a.regclass, + a.obj_desc, + grantor.rolname AS grantor, + grantee.rolname AS grantee, + a.privilege_type, + a.is_grantable + FROM + ( + SELECT + 'pg_init_privs'::regclass + AS regclass, + pg_describe_object(aa.classoid,aa.objoid,aa.objsubid) + AS obj_desc, + (aclexplode(aa.initprivs)).* + FROM pg_catalog.pg_init_privs AS aa + ) AS a + JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor + JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee +UNION ALL + SELECT + a.regclass, + a.obj_desc, + grantor.rolname AS grantor, + grantee.rolname AS grantee, + a.privilege_type, + a.is_grantable + FROM + ( + SELECT + 'pg_language'::regclass + AS regclass, + pg_describe_object('pg_language'::regclass,aa.oid,0) + AS obj_desc, + (aclexplode(aa.lanacl)).* + FROM pg_catalog.pg_language AS aa + ) AS a + JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor + JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee +UNION ALL + SELECT + a.regclass, + a.obj_desc, + grantor.rolname AS grantor, + grantee.rolname AS grantee, + a.privilege_type, + a.is_grantable + FROM + ( + SELECT + 'pg_largeobject_metadata'::regclass + AS regclass, + pg_describe_object('pg_largeobject_metadata'::regclass,aa.oid,0) + AS obj_desc, + (aclexplode(aa.lomacl)).* + FROM pg_catalog.pg_largeobject_metadata AS aa + ) AS a + JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor + JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee +UNION ALL + SELECT + a.regclass, + a.obj_desc, + grantor.rolname AS grantor, + grantee.rolname AS grantee, + a.privilege_type, + a.is_grantable + FROM + ( + SELECT + 'pg_namespace'::regclass + AS regclass, + pg_describe_object('pg_namespace'::regclass,aa.oid,0) + AS obj_desc, + (aclexplode(aa.nspacl)).* + FROM pg_catalog.pg_namespace AS aa + ) AS a + JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor + JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee +UNION ALL + SELECT + a.regclass, + a.obj_desc, + grantor.rolname AS grantor, + grantee.rolname AS grantee, + a.privilege_type, + a.is_grantable + FROM + ( + SELECT + 'pg_proc'::regclass + AS regclass, + pg_describe_object('pg_proc'::regclass,aa.oid,0) + AS obj_desc, + (aclexplode(aa.proacl)).* + FROM pg_catalog.pg_proc AS aa + ) AS a + JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor + JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee +UNION ALL + SELECT + a.regclass, + a.obj_desc, + grantor.rolname AS grantor, + grantee.rolname AS grantee, + a.privilege_type, + a.is_grantable + FROM + ( + SELECT + 'pg_tablespace'::regclass + AS regclass, + pg_describe_object('pg_tablespace'::regclass,aa.oid,0) + AS obj_desc, + (aclexplode(aa.spcacl)).* + FROM pg_catalog.pg_tablespace AS aa + ) AS a + JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor + JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee +UNION ALL + SELECT + a.regclass, + a.obj_desc, + grantor.rolname AS grantor, + grantee.rolname AS grantee, + a.privilege_type, + a.is_grantable + FROM + ( + SELECT + 'pg_type'::regclass + AS regclass, + pg_describe_object('pg_type'::regclass,aa.oid,0) + AS obj_desc, + (aclexplode(aa.typacl)).* + FROM pg_catalog.pg_type AS aa + ) AS a + JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor + JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee; + +CREATE VIEW pg_ownerships AS + SELECT + 'pg_class'::regclass + AS regclass, + pg_describe_object('pg_class'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_class AS aa + JOIN pg_catalog.pg_authid ON aa.relowner = pg_authid.oid +UNION ALL + SELECT + 'pg_collation'::regclass + AS regclass, + pg_describe_object('pg_collation'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_collation AS aa + JOIN pg_catalog.pg_authid ON aa.collowner = pg_authid.oid +UNION ALL + SELECT + 'pg_conversion'::regclass + AS regclass, + pg_describe_object('pg_conversion'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_conversion AS aa + JOIN pg_catalog.pg_authid ON aa.conowner = pg_authid.oid +UNION ALL + SELECT + 'pg_database'::regclass + AS regclass, + pg_describe_object('pg_database'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_database AS aa + JOIN pg_catalog.pg_authid ON aa.datdba = pg_authid.oid +UNION ALL + SELECT + 'pg_default_acl'::regclass + AS regclass, + pg_describe_object('pg_default_acl'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_default_acl AS aa + JOIN pg_catalog.pg_authid ON aa.defaclrole = pg_authid.oid +UNION ALL + SELECT + 'pg_event_trigger'::regclass + AS regclass, + pg_describe_object('pg_event_trigger'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_event_trigger AS aa + JOIN pg_catalog.pg_authid ON aa.evtowner = pg_authid.oid +UNION ALL + SELECT + 'pg_extension'::regclass + AS regclass, + pg_describe_object('pg_extension'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_extension AS aa + JOIN pg_catalog.pg_authid ON aa.extowner = pg_authid.oid +UNION ALL + SELECT + 'pg_foreign_data_wrapper'::regclass + AS regclass, + pg_describe_object('pg_foreign_data_wrapper'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_foreign_data_wrapper AS aa + JOIN pg_catalog.pg_authid ON aa.fdwowner = pg_authid.oid +UNION ALL + SELECT + 'pg_foreign_server'::regclass + AS regclass, + pg_describe_object('pg_foreign_server'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_foreign_server AS aa + JOIN pg_catalog.pg_authid ON aa.srvowner = pg_authid.oid +UNION ALL + SELECT + 'pg_language'::regclass + AS regclass, + pg_describe_object('pg_language'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_language AS aa + JOIN pg_catalog.pg_authid ON aa.lanowner = pg_authid.oid +UNION ALL + SELECT + 'pg_largeobject_metadata'::regclass + AS regclass, + pg_describe_object('pg_largeobject_metadata'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_largeobject_metadata AS aa + JOIN pg_catalog.pg_authid ON aa.lomowner = pg_authid.oid +UNION ALL + SELECT + 'pg_namespace'::regclass + AS regclass, + pg_describe_object('pg_namespace'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_namespace AS aa + JOIN pg_catalog.pg_authid ON aa.nspowner = pg_authid.oid +UNION ALL + SELECT + 'pg_opclass'::regclass + AS regclass, + pg_describe_object('pg_opclass'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_opclass AS aa + JOIN pg_catalog.pg_authid ON aa.opcowner = pg_authid.oid +UNION ALL + SELECT + 'pg_operator'::regclass + AS regclass, + pg_describe_object('pg_operator'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_operator AS aa + JOIN pg_catalog.pg_authid ON aa.oprowner = pg_authid.oid +UNION ALL + SELECT + 'pg_opfamily'::regclass + AS regclass, + pg_describe_object('pg_opfamily'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_opfamily AS aa + JOIN pg_catalog.pg_authid ON aa.opfowner = pg_authid.oid +UNION ALL + SELECT + 'pg_policy'::regclass + AS regclass, + pg_describe_object('pg_policy'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_policy AS aa + JOIN pg_catalog.pg_authid ON pg_authid.oid = ANY(aa.polroles) +UNION ALL + SELECT + 'pg_proc'::regclass + AS regclass, + pg_describe_object('pg_proc'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_proc AS aa + JOIN pg_catalog.pg_authid ON aa.proowner = pg_authid.oid +UNION ALL + SELECT + 'pg_publication'::regclass + AS regclass, + pg_describe_object('pg_publication'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_publication AS aa + JOIN pg_catalog.pg_authid ON aa.pubowner = pg_authid.oid +UNION ALL + SELECT + 'pg_statistic_ext'::regclass + AS regclass, + pg_describe_object('pg_statistic_ext'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_statistic_ext AS aa + JOIN pg_catalog.pg_authid ON aa.stxowner = pg_authid.oid +UNION ALL + SELECT + 'pg_subscription'::regclass + AS regclass, + pg_describe_object('pg_subscription'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_subscription AS aa + JOIN pg_catalog.pg_authid ON aa.subowner = pg_authid.oid +UNION ALL + SELECT + 'pg_tablespace'::regclass + AS regclass, + pg_describe_object('pg_tablespace'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_tablespace AS aa + JOIN pg_catalog.pg_authid ON aa.spcowner = pg_authid.oid +UNION ALL + SELECT + 'pg_ts_config'::regclass + AS regclass, + pg_describe_object('pg_ts_config'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_ts_config AS aa + JOIN pg_catalog.pg_authid ON aa.cfgowner = pg_authid.oid +UNION ALL + SELECT + 'pg_ts_dict'::regclass + AS regclass, + pg_describe_object('pg_ts_dict'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_ts_dict AS aa + JOIN pg_catalog.pg_authid ON aa.dictowner = pg_authid.oid +UNION ALL + SELECT + 'pg_type'::regclass + AS regclass, + pg_describe_object('pg_type'::regclass,aa.oid,0) + AS obj_desc, + pg_authid.rolname + FROM pg_catalog.pg_type AS aa + JOIN pg_catalog.pg_authid ON aa.typowner = pg_authid.oid; + CREATE VIEW pg_settings AS SELECT * FROM pg_show_all_settings() AS A;