目录表的特权不会被撤销

Posted

技术标签:

【中文标题】目录表的特权不会被撤销【英文标题】:Privileges on catalog tables are not revoked 【发布时间】:2021-02-24 17:00:14 【问题描述】:

使用 Redshift 并且无法从 myuser 撤销对 pg_catalog 架构的所有权限

dev=# REVOKE ALL PRIVILEGES ON SCHEMA pg_catalog FROM myuser;
REVOKE
dev=# SELECT
    u.usename,
    s.schemaname,
    has_schema_privilege(u.usename,s.schemaname,'create') AS user_has_select_permission,
    has_schema_privilege(u.usename,s.schemaname,'usage') AS user_has_usage_permission
FROM
    pg_user u
CROSS JOIN
    (SELECT DISTINCT schemaname FROM pg_tables) s
WHERE
    u.usename = 'myuser'
    AND s.schemaname = 'pg_catalog'
;
 usename | schemaname | user_has_select_permission | user_has_usage_permission
---------+------------+----------------------------+---------------------------
 myuser  | pg_catalog | f                          | t
(1 row)

这是为什么呢?

【问题讨论】:

【参考方案1】:

那是因为这些特权被授予PUBLIC 即所有人。

另外,SQL 中的权限是累积的:不能添加“负权限”,也就是例外。换句话说,您只能撤销以前授予的特权。此外,尝试REVOKE 从未授予的特权既不是错误也不会产生警告,但会被忽略。

现在,由于目录表的权限被授予PUBLIC,而不是myuser,因此您的REVOKE 什么都不做。

我再次警告你:不要试图撤销目录表的权限!

【讨论】:

当您说“这些权限被授予PUBLIC”时,您的意思是PUBLIC 组?我问是因为当我做 SELECT * from pg_groups 它返回 0 行 对;它是一个“伪群”。例如,您不能丢弃它。它是硬连线到系统中的。 @femeloper 问一个新问题。

以上是关于目录表的特权不会被撤销的主要内容,如果未能解决你的问题,请参考以下文章

撤销excel工作表保护的方法步骤

excel如何撤销工作表保护

文件从暂存区撤销

关于git的撤销

保存工作表的副本并撤销对原始文件的所有更改

我是不是必须撤销超级用户对审计日志表的权限?