在 PostgreSQL 中撤销另一个用户授予的权限
Posted
技术标签:
【中文标题】在 PostgreSQL 中撤销另一个用户授予的权限【英文标题】:Revoking rights granted by another user in PostgreSQL 【发布时间】:2015-07-27 19:53:16 【问题描述】:在 PostgreSQL 中,当超级用户授予任何权限时(例如 GRANT SELECT ON TABLE table_name),只有该 SU 可以撤销它们。
是否有其他超级用户可以撤销上述授权?
编辑:这是我正在运行的示例查询:
ALTER DEFAULT PRIVILEGES IN SCHEMA my_schema REVOKE SELECT ON TABLES FROM public CASCADE;
但是,即使在刷新所有内容后,当我查看架构时仍会显示所述默认权限。我已经使用我的超级用户帐户和 postgres 帐户运行它,但都不起作用。
【问题讨论】:
【参考方案1】:来自documentation:
如果超级用户选择发出 GRANT 或 REVOKE 命令,则执行该命令就好像它是由受影响对象的所有者发出的一样。
因此任何超级用户都可以撤销权限,即使是其他超级用户授予的权限。
您可以使用命令ALTER DEFAULT PRIVILEGES
将初始 权限(创建对象时分配的权限)设置为PostgreSQL 默认权限以外的其他权限。但是,运行该命令只会影响(来自文档):
将应用于未来创建的对象的权限。 (它不会影响分配给已存在对象的权限。)
更改现有对象的权限需要单独的 GRANT
s 和 REVOKE
s,但您也可以应用以下快捷方式:
GRANT | REVOKE [privileges] ON ALL TABLES IN SCHEMA [schema name];
对于序列和函数也是如此。
【讨论】:
这是我正在运行的代码:ALTER DEFAULT PRIVILEGES IN SCHEMA my_schema REVOKE SELECT ON TABLES FROM public CASCADE;
但 public 仍然显示为对所有表具有默认的 select 权限。以上是关于在 PostgreSQL 中撤销另一个用户授予的权限的主要内容,如果未能解决你的问题,请参考以下文章