使用,通过以下方式为数据库pg 13.4
创建了一个只读用户:reader
abc
CREATE ROLE reader WITH LOGIN PASSWORD 'psssswwwd'
NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION VALID UNTIL 'infinity';
GRANT CONNECT ON DATABASE abc TO reader;
GRANT USAGE ON SCHEMA public TO reader;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO reader;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO reader;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO reader;
但是用户仍然可以创建表,然后插入和删除该表。
我希望用户无法对 pg 中的任何数据库进行任何更改,并且只能连接和读取数据库abc
。
我检查了https://stackoverflow.com/questions/24332588/read-only-user-able-to-create-table,
并尝试:REVOKE CREATE ON SCHEMA public FROM reader;
但它仍然可以创建表。
有什么建议吗?谢谢。
您运行的
REVOKE
语句撤销了从未授予的特权,因此它什么也不做。如果您查看权限,您将看到该架构
public
已CREATE
授予PUBLIC
(即所有人),因此您将不得不撤销:然后,您必须授予
CREATE
应该在该模式中创建对象的角色。