要查询授予给表的GRANTS,可以使用以下查询:
SELECT grantee, privilege_type
FROM information_schema.role_table_grants
WHERE table_name='mytable'
(请查看我之前的问题:在PostgreSQL中查询表的授权)
但我如何查询授予序列的GRANTS?
要查询授予给表的GRANTS,可以使用以下查询:
SELECT grantee, privilege_type
FROM information_schema.role_table_grants
WHERE table_name='mytable'
(请查看我之前的问题:在PostgreSQL中查询表的授权)
但我如何查询授予序列的GRANTS?
我已经查看了源代码,但无法在information_schema表中找到公开序列ACL的任何位置。(虽然我可能错过了什么。)
然而,在系统目录pg_class中,PostgreSQL确实公开了序列的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暴露出来,但没有返回“Sequence generator support”的“YES”(这只是对PostgreSQL的观察,而不是批评)。
不过,话虽如此,在2003年的SQL标准中,我也没找到任何暴露这些权限的内容。在ROLE_TABLE_GRANTS视图的定义中很容易找到PRIVILEGE_TYPE,但就我所知,在标准中并没有类似于序列的内容。
GRANT USAGE, SELECT ON SEQUENCE sequence_name TO user_role_name;
pg_class
查询来推断授予序列的权限,其中包含relacl
列的内容。 第一组(在第一个逗号之前)将是序列所有者权限:owner=rwU/owner
,其中r表示读取权限(currval
),w表示写入权限(nextval
和setval
),U表示使用权限(currval
和nextval
)。 由于通常只授予使用和选择权限,因此其他acl看起来像grantee=rU/owner
。 - mimidatabaseselect * from information_schema.role_usage_grants
。 - enesaltinok