CREATE USER readonly WITH ENCRYPTED PASSWORD 'readonly';
GRANT USAGE ON SCHEMA public to readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly;
-- repeat code below for each database:
GRANT CONNECT ON DATABASE foo to readonly;
\c foo
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly; --- this grants privileges on new tables generated in new database "foo"
GRANT USAGE ON SCHEMA public to readonly;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------+-----------
flux | | {}
postgres | Superuser, Create role, Create DB, Replication | {}
字符串 执行以下命令后:
postgres=# ALTER ROLE flux WITH Superuser;
ALTER ROLE
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------+-----------
flux | Superuser | {}
postgres | Superuser, Create role, Create DB, Replication | {}
5条答案
按热度按时间z0qdvdin1#
这是最近更新的PostgreSQL 9+的完整解决方案。
字符串
感谢https://jamie.curle.io/creating-a-read-only-user-in-postgres/提供的几个重要方面
如果有人找到了更短的代码,最好是能够对所有现有数据库执行此操作的代码,额外的荣誉。
xvw2m8pv2#
尝试添加
字符串
您可能没有意识到,为了使用模式中的对象,需要对模式具有必要的权限。
xj3cbfub3#
这对我很有效:
使用以下命令检查您登录的当前角色:SELECT CURRENT_USER,SESSION_USER;
注意:必须与schema的Owner匹配。
模式|名称|类型|所有者
--------+--------+-------+----------
如果所有者不同,则通过以下方式从管理员角色向当前用户角色给予所有赠款:
将“ROLE_OWNER”授予“CURRENT ROLENAME”;
然后尝试执行查询,它将给予输出,因为它现在可以访问所有的关系。
wn9m85ua4#
确保你的用户在其角色上有属性。例如:
字符串
执行以下命令后:
型
它解决了这个问题。
请参阅角色和材料的教程:https://www.digitalocean.com/community/tutorials/how-to-use-roles-and-manage-grant-permissions-in-postgresql-on-a-vps--2
q43xntqr5#
你应该执行下一个查询:
字符串
或者,如果你的错误是在一个视图中,那么可能表没有权限,所以你应该执行下一个查询:
型