【问题标题】:Query GRANTS granted to a sequence in postgres查询授予 postgres 中序列的 ​​GRANTS
【发布时间】:2011-11-12 08:28:04
【问题描述】:

要查询授予表的 GRANTS,我可以使用如下查询:

SELECT grantee, privilege_type 
FROM information_schema.role_table_grants 
WHERE table_name='mytable'

(在这里查看我的旧问题:Query grants for a table in postgres

但是我如何查询 GRANTS 到一个序列?

【问题讨论】:

    标签: sql postgresql sequence grant


    【解决方案1】:

    我查看了源代码,但找不到任何通过 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,但据我所知,标准中的序列没有类似的东西。

    【讨论】:

    • 感谢您的回答,但这并不是我真正需要的
    • 您需要的可能不存在。 information_schema 表是在最早的 SQL 标准中定义的。但是序列直到 2003 年才成为 SQL 标准的一部分。大多数支持序列的 dbms 在标准发布之前就已经支持,而且它们中的大多数并不完全符合标准行为或语法。
    • 我刚刚添加了一些信息,让您想要的东西看起来更不可能。如果您想自己查看,可以在线找到 SQL 2003 标准的最新草案。
    • 除了解释@MikeSherrill'CatRecall'的内容外,使用他发布的pg_class 上的查询,您可以使用relacl 列内容推断授予序列的权限。第一个集合(在第一个逗号之前)将是序列所有者权限:owner=rwU/owner 其中 r 将是读取权限(currval),w 将是写入权限(nextvalsetval),U 将是使用权限(@987654329 @ 和 nextval)。由于您通常只授予 Usage 和 select 权限,其他 acl 看起来像 grantee=rU/owner
    • 我在其他线程上找到了这个,它对我有用:select * from information_schema.role_usage_grants
    【解决方案2】:
    GRANT USAGE, SELECT ON SEQUENCE sequence_name TO user_role_name;
    

    如此处所示:https://www.postgresql.org/docs/current/sql-grant.html

    【讨论】:

    • 这不是在序列上查询GRANT,而是设置它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 2021-04-07
    • 2011-11-12
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    相关资源
    最近更新 更多