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

4smxwvx5  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(5)|浏览(296)
  1. GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;

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

  1. ERROR: permission denied for relation mytable
  2. SQL state: 42501


我做错了什么?

z0qdvdin

z0qdvdin1#

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

  1. CREATE USER readonly WITH ENCRYPTED PASSWORD 'readonly';
  2. GRANT USAGE ON SCHEMA public to readonly;
  3. ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly;
  4. -- repeat code below for each database:
  5. GRANT CONNECT ON DATABASE foo to readonly;
  6. \c foo
  7. ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly; --- this grants privileges on new tables generated in new database "foo"
  8. GRANT USAGE ON SCHEMA public to readonly;
  9. GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO readonly;
  10. GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;

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

展开查看全部
xvw2m8pv

xvw2m8pv2#

尝试添加

  1. GRANT USAGE ON SCHEMA public to readonly;

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

xj3cbfub

xj3cbfub3#

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

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

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

wn9m85ua

wn9m85ua4#

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

  1. postgres=# \du
  2. List of roles
  3. Role name | Attributes | Member of
  4. -----------+------------------------------------------------+-----------
  5. flux | | {}
  6. postgres | Superuser, Create role, Create DB, Replication | {}

字符串
执行以下命令后:

  1. postgres=# ALTER ROLE flux WITH Superuser;
  2. ALTER ROLE
  3. postgres=# \du
  4. List of roles
  5. Role name | Attributes | Member of
  6. -----------+------------------------------------------------+-----------
  7. flux | Superuser | {}
  8. 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#

你应该执行下一个查询:

  1. GRANT ALL ON TABLE mytable TO myuser;

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

  1. GRANT ALL ON TABLE tbm_grupo TO myuser;

相关问题