我正在使用 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 并且...得到完全相同的结果:未修改默认权限。
我在这里错过了什么?
谢谢 !
编辑回答与\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)
| 归档时间: |
|
| 查看次数: |
7789 次 |
| 最近记录: |