postgresql 错误:以只读用户身份尝试SELECT时,Postgres上的关系表名的权限被拒绝

4smxwvx5  于 12个月前  发布在  PostgreSQL
关注(0)|答案(5)|浏览(251)
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;

字符串
只读用户可以连接,查看表,但当它试图做一个简单的选择时,它得到:

ERROR: permission denied for relation mytable
SQL state: 42501


我做错了什么?

z0qdvdin

z0qdvdin1#

这是最近更新的PostgreSQL 9+的完整解决方案。

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;

字符串
感谢https://jamie.curle.io/creating-a-read-only-user-in-postgres/提供的几个重要方面
如果有人找到了更短的代码,最好是能够对所有现有数据库执行此操作的代码,额外的荣誉。

xvw2m8pv

xvw2m8pv2#

尝试添加

GRANT USAGE ON SCHEMA public to readonly;

字符串
您可能没有意识到,为了使用模式中的对象,需要对模式具有必要的权限。

xj3cbfub

xj3cbfub3#

这对我很有效:
使用以下命令检查您登录的当前角色:SELECT CURRENT_USER,SESSION_USER;

注意:必须与schema的Owner匹配。

模式|名称|类型|所有者
--------+--------+-------+----------
如果所有者不同,则通过以下方式从管理员角色向当前用户角色给予所有赠款:
将“ROLE_OWNER”授予“CURRENT ROLENAME”;
然后尝试执行查询,它将给予输出,因为它现在可以访问所有的关系。

wn9m85ua

wn9m85ua4#

确保你的用户在其角色上有属性。例如:

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 | {}


它解决了这个问题。
请参阅角色和材料的教程:https://www.digitalocean.com/community/tutorials/how-to-use-roles-and-manage-grant-permissions-in-postgresql-on-a-vps--2

q43xntqr

q43xntqr5#

你应该执行下一个查询:

GRANT ALL ON TABLE mytable TO myuser;

字符串
或者,如果你的错误是在一个视图中,那么可能表没有权限,所以你应该执行下一个查询:

GRANT ALL ON TABLE tbm_grupo TO myuser;

相关问题