在 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 默认权限以外的其他权限。但是,运行该命令只会影响(来自文档):

将应用于未来创建的对象的权限。 (它不会影响分配给已存在对象的权限。)

更改现有对象的权限需要单独的 GRANTs 和 REVOKEs,但您也可以应用以下快捷方式:

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 中撤销另一个用户授予的权限的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 不会递归地撤销角色

如何在 PostgreSQL 中默认撤销函数的执行权限

postgresql 权限详解

授予/撤销权限的 SQL 触发器

MySQL的安全设置

撤销 Oracle 中的特权会影响使用这些特权的正在进行的事务吗?