我知道之前也曾提出过类似的问题,但是答案似乎并不能解决我的问题,所以我认为更完整的答案将很有价值。
我想为Postgresql数据库创建一个只读用户。我已经使用pg_hba.conf文件为用户授予了对服务器的访问权限。
作为postgres管理员用户,我运行了以下命令:
CREATE ROLE read_only_user NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
GRANT CONNECT ON DATABASE the_database TO read_only_user;
GRANT USAGE ON SCHEMA public to read_only_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only_user;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO read_only_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO read_only_user;
ALTER ROLE read_only_user WITH PASSWORD '*********************';
ALTER ROLE read_only_user VALID UNTIL 'infinity';
ALTER ROLE read_only_user WITH LOGIN;
ALTER USER read_only_user SET search_path = public;
因此,我能够本地登录the_database数据库,并使用具有用户名和密码身份验证的DB客户端远程登录,并且可以列出数据库中的表。但是,任何选择或查看数据库内容的尝试都会导致
ERROR: permission denied for relation the_table
还需要其他哪些权限,因为据我所知,所有必需的权限都被授予。