要查询授予表的 GRANTS,我可以使用如下查询:
SELECT grantee, privilege_type
FROM information_schema.role_table_grants
WHERE table_name='mytable'
(在这里查看我的旧问题:Query grants for a table in postgres)
但是我如何查询 GRANTS 磨成一个序列?
要查询授予表的 GRANTS,我可以使用如下查询:
SELECT grantee, privilege_type
FROM information_schema.role_table_grants
WHERE table_name='mytable'
(在这里查看我的旧问题:Query grants for a table in postgres)
但是我如何查询 GRANTS 磨成一个序列?
我查看了源代码,但找不到任何通过 information_schema 表公开序列 ACL 的地方。(不过,我可能错过了一些东西。)
PostgreSQL 确实公开了系统目录 pg_class 中序列的 ACL。
SELECT relname, relacl
FROM pg_class
WHERE relkind = 'S'
AND relacl is not null
AND relnamespace IN (
SELECT oid
FROM pg_namespace
WHERE nspname NOT LIKE 'pg_%'
AND nspname != 'information_schema'
);
就 information_schema 和标准 SQL 序列而言,PostgreSQL 不支持它们。
select feature_name, is_supported
from information_schema.sql_features
where feature_name = 'Sequence generator support';
PostgreSQL 在这方面是不合格的,因为它公开了 information_schema.sequences 而没有为“序列生成器支持”返回“YES”。(这是一个观察,而不是对 PostgreSQL 的批评。)
但是,说了这么多,我在 2003 年的 SQL 标准中也找不到任何暴露这些特权的东西。在 ROLE_TABLE_GRANTS 视图的定义中很容易找到 PRIVILEGE_TYPE,但据我所知,标准中的序列没有类似的东西。
GRANT USAGE, SELECT ON SEQUENCE sequence_name TO user_role_name;
如此处所示:https ://www.postgresql.org/docs/current/sql-grant.html