使用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
什么也不做。
我再次警告您:不要试图撤销编目表上的权限!