我在 postgres 实例上执行了以下操作:
create group dev;
grant select on all tables in schema public to dev;
我要做的就是查询视图/表以找到此授权。我试过查看类似information_schema.table_privileges
但看不到的视图。有人可以指出我正确的方向吗?
PS这需要是一个查询视图,因为我是从python脚本而不是psql运行它。
编辑:PostgreSQL 版本 10.0
我在 postgres 实例上执行了以下操作:
create group dev;
grant select on all tables in schema public to dev;
我要做的就是查询视图/表以找到此授权。我试过查看类似information_schema.table_privileges
但看不到的视图。有人可以指出我正确的方向吗?
PS这需要是一个查询视图,因为我是从python脚本而不是psql运行它。
编辑:PostgreSQL 版本 10.0
-bash-4.2$ psql t -E
psql (9.3.14)
Type "help" for help.
t=# \dp+ schema_name.*
********* QUERY **********
SELECT n.nspname as "Schema",
c.relname as "Name",
CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'S' THEN 'sequence' WHEN 'f' THEN 'foreign table' END as "Type",
pg_catalog.array_to_string(c.relacl, E'\n') AS "Access privileges",
pg_catalog.array_to_string(ARRAY(
SELECT attname || E':\n ' || pg_catalog.array_to_string(attacl, E'\n ')
FROM pg_catalog.pg_attribute a
WHERE attrelid = c.oid AND NOT attisdropped AND attacl IS NOT NULL
), E'\n') AS "Column access privileges"
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r', 'v', 'm', 'S', 'f')
AND n.nspname ~ '^(schema_name)$'
ORDER BY 1, 2;
**************************
f
因此您可以对查询使用相同的逻辑,例如在架构中列出用户的权限schema_name
:
with l as (select relname,unnest(relacl) from pg_class c join pg_catalog.pg_namespace n ON n.oid = c.relnamespace where nspname = 'schema_name')
select * from l where unnest::text like 'f=%';
relname | unnest
-----------------------------------------------------+--------------
a_b | f=r/postgres
b_c | f=r/postgres