0

我想为开发人员创建一个专用角色,以便从 pgadmin 访问 pgagent。我这样做了:

CREATE ROLE pgagent_dev NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT NOLOGIN;
COMMENT ON ROLE pgagent_dev IS 'Role dedicated to Developers access to pgagent';

GRANT USAGE ON SCHEMA pgagent TO pgagent_dev ;
-- GRANT ALL ON SCHEMA pgagent TO pgagent_dev;
GRANT SELECT ON ALL TABLES IN SCHEMA pgagent TO pgagent_dev;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA pgagent TO pgagent_dev;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA pgagent TO pgagent_dev;

GRANT pgagent_dev TO toto;
GRANT pgagent_dev TO tutu;

从 pgadmin 中,他们可以看到 pgagent 文件夹,但无法展开,并且 postgresql 显示此日志。

2019-12-10 10:29:39.327 +07 [24784] ERROR:  permission denied for schema pgagent
2019-12-10 10:29:39.327 +07 [24784] STATEMENT:  
    SELECT
        has_table_privilege(
          'pgagent.pga_job', 'INSERT, SELECT, UPDATE'
        ) has_priviledge
    WHERE EXISTS(
        SELECT has_schema_privilege('pgagent', 'USAGE')
        WHERE EXISTS(
            SELECT cl.oid FROM pg_class cl
            LEFT JOIN pg_namespace ns ON ns.oid=relnamespace
            WHERE relname='pga_job' AND nspname='pgagent'
        )
    )

我做错了什么或忘记了什么?谢谢。

4

1 回答 1

1

这些语句按预期工作,我可以在模式 pgagent 上看到适当的权限。

  1. 请确保 CREATE ROLE 和所有 GRANT 语句都作为模式的所有者运行。
  2. 还要在数据库上运行以下语句以查看实际的 o/p。它应该如下所示。
    postgres=#选择
            has_table_privilege(
              'pgagent.pga_job'、'插入、选择、更新'
            ) has_priviledge
        存在的地方(
            SELECT has_schema_privilege('pgagent', 'USAGE')
            存在的地方(
                从 pg_class cl 中选择 cl.oid
                左连接 pg_namespace ns ON ns.oid=relnamespace
                哪里 relname='pga_job' 和 nspname='pgagent'
            )
        );
     has_priviledge
    ----------------
     吨
    (1 行)
  1. 您还可以尝试使用用户 tutu/toto 执行以下查询,以查看这些用户是否对架构 pgagent 具有适当的权限。
[root@localhost bin]# ./psql -U tutu -d postgres -p 5432
psql (12.1)
键入“帮助”以获得帮助。

postgres=> 从 pgagent.pga_job 中选择 *;
 工作ID | 乔布斯 | 职位名称 | 职位描述 | 工作主机代理 | 工作启用 | 创造就业机会 | 换工作 | 工作代理ID | 下一个工作
运行 | 工作结束
--------+----------+---------+---------+----------- ---+------------+-------------------+- ------------------+------------+------ --
----+------------
     1 | 1 | 测试 | | | 吨 | 2019-12-10 06:35:33.643407+00 | 2019-12-10 06:35:33.643407+00 | |        
    |
(1 行)

披露:我为EnterpriseDB (EDB)工作

于 2019-12-10T07:16:17.663 回答