目录表上的权限不会被撤销



使用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)

为什么?

这是因为这些特权被授予PUBLIC即每个人。

同样,SQL中的特权是累积的:你不能添加"负特权",也就是说,制造一个例外。换句话说,您只能撤销以前授予的特权。此外,尝试REVOKE一个从未被授予的特权既不是错误,也不会产生警告,但它会被静默地忽略。

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

我再次警告您:不要试图撤销编目表上的权限!

相关内容

  • 没有找到相关文章

最新更新