revoke create on public schema is not working,Postgresql

u7up0aaq  于 2023-04-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(116)

我用的是PostgreSQL 12。14我是superuser我不希望user 1在公共模式中创建表。我已经设置了readonly权限,还授予了usage权限,并撤销了user 1对public的create权限。由于某些原因,user 1仍然能够创建表。有没有办法解决这个问题-禁止只读用户CREATE表在公共模式,而superuser是允许的。
连接到数据库后,默认情况下它指向public。这是我运行的(运行后没有弹出错误消息):

CREATE USER user1 WITH PASSWORD 'this-is-password';
GRANT readonly TO user1;
GRANT USAGE ON SCHEMA public TO user1;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO user1;
REVOKE CREATE ON SCHEMA public FROM user1;

先谢谢你了。

w46czmvw

w46czmvw1#

您只能撤消已授予的权限。从user1中撤销CREATE的尝试没有任何作用,因为该用户从未被授予该权限。
查看架构上的权限:

SELECT p.privilege_type,
       CASE WHEN p.grantee = 0
            THEN 'PUBLIC'
            ELSE p.grantee::regrole::text
       END AS grantee
FROM pg_namespace AS n
   CROSS JOIN LATERAL aclexplode(n.nspacl) AS p
WHERE n.nspname = 'public';

您可能会看到CREATE被授予了PUBLIC。因此,您只能撤销该特权:

REVOKE CREATE ON SCHEMA public FROM PUBLIC;

相关问题