无法撤销 postgresql 用户的默认权限

7 postgresql permissions psql

我正在使用 psql 工具:

命令:

my_db=# \ddp
Run Code Online (Sandbox Code Playgroud)

结果:

                         Default access privileges
     Owner      | Schema |   Type   |          Access privileges
----------------+--------+----------+--------------------------------------
 postgres       | kpi    | function | kpi_updater=X/postgres              +
                |        |          | intranet2=X/postgres
 postgres       | kpi    | sequence | kpi_updater=rwU/postgres            +
                |        |          | intranet2=rwU/postgres
 postgres       | kpi    | table    | kpi_updater=arwdDxt/postgres        +
                |        |          | intranet2=arwdDxt/postgres
 postgres       | kpi    | type     | kpi_updater=U/postgres              +
                |        |          | intranet2=U/postgres
Run Code Online (Sandbox Code Playgroud)

接下来,我使用以下命令,返回没有错误:

ALTER DEFAULT PRIVILEGES IN SCHEMA kpi REVOKE EXECUTE ON FUNCTIONS FROM intranet2;
Run Code Online (Sandbox Code Playgroud)

我再次运行 \ddp 并且...得到完全相同的结果:未修改默认权限。

我在这里错过了什么?

谢谢 !

Kas*_*dry 7

编辑回答与\ddp命令相关的问题,而不是\dp@personne3000 在下面的评论中指出的命令。

你可能想用 ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA kpi REVOKE EXECUTE ON FUNCTIONS FROM intranet2;

这是因为postgres是被授予该模式中的功能执行的默认权限的用户kpi,并且它授予intranet2,如intranet2=X/postgres

我创建了一个小例子来说明发生了什么。

pgsql@[local]:5432:pgsql:=# CREATE ROLE bob;
CREATE ROLE
Time: 0.526 ms
pgsql@[local]:5432:pgsql:=# CREATE SCHEMA we_like_bob;
CREATE SCHEMA
Time: 0.608 ms

pgsql@[local]:5432:pgsql:=# ALTER DEFAULT PRIVILEGES FOR ROLE bob IN SCHEMA we_like_bob GRANT EXECUTE ON FUNCTIONS TO pgsql;
ALTER DEFAULT PRIVILEGES
Time: 1.480 ms
pgsql@[local]:5432:pgsql:=# \ddp
             Default access privileges
 Owner |   Schema    |   Type   | Access privileges 
-------+-------------+----------+-------------------
 bob   | we_like_bob | function | pgsql=X/bob
(1 row)
Run Code Online (Sandbox Code Playgroud)

用户 pgsql 具有由 bob 授予的执行权限 X。

尝试撤销角色 pgsql 的执行权限,作为 pgsql(超级用户)。

pgsql@[local]:5432:pgsql:=# ALTER DEFAULT PRIVILEGES FOR ROLE pgsql IN SCHEMA we_like_bob REVOKE EXECUTE ON FUNCTIONS FROM pgsql;
ALTER DEFAULT PRIVILEGES
Time: 0.176 ms
pgsql@[local]:5432:pgsql:=# \ddp
             Default access privileges
 Owner |   Schema    |   Type   | Access privileges 
-------+-------------+----------+-------------------
 bob   | we_like_bob | function | pgsql=X/bob
(1 row)
Run Code Online (Sandbox Code Playgroud)

不起作用,因为该命令没有删除 bob 角色将函数执行授予角色 pgsql 的默认能力,而是删除了 pgsql 角色从 pgsql 撤消对函数执行的能力。

如果我们更改它以从角色 pgsql 的 bob 角色中删除执行权限,那么它就可以工作了。

pgsql@[local]:5432:pgsql:=# ALTER DEFAULT PRIVILEGES FOR ROLE bob IN SCHEMA we_like_bob REVOKE EXECUTE ON FUNCTIONS FROM pgsql;
ALTER DEFAULT PRIVILEGES
Time: 0.644 ms
pgsql@[local]:5432:pgsql:=# \ddp
         Default access privileges
 Owner | Schema | Type | Access privileges 
-------+--------+------+-------------------
(0 rows)

pgsql@[local]:5432:pgsql:=#
Run Code Online (Sandbox Code Playgroud)