GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
字符串只读用户可以连接,查看表,但当它试图做一个简单的选择时,它得到:
ERROR: permission denied for relation mytableSQL state: 42501
ERROR: permission denied for relation mytable
SQL state: 42501
型我做错了什么?
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 fooALTER 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;
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 SELECT ON ALL SEQUENCES IN SCHEMA public TO readonly;
字符串感谢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#
确保你的用户在其角色上有属性。例如:
postgres=# \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------+----------- flux | | {} postgres | Superuser, Create role, Create DB, Replication | {}
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 ROLEpostgres=# \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------+----------- flux | Superuser | {}postgres | Superuser, Create role, Create DB, Replication | {}
postgres=# ALTER ROLE flux WITH Superuser;
ALTER ROLE
flux | Superuser | {}
型它解决了这个问题。请参阅角色和材料的教程:https://www.digitalocean.com/community/tutorials/how-to-use-roles-and-manage-grant-permissions-in-postgresql-on-a-vps--2
q43xntqr5#
你应该执行下一个查询:
GRANT ALL ON TABLE mytable TO myuser;
字符串或者,如果你的错误是在一个视图中,那么可能表没有权限,所以你应该执行下一个查询:
GRANT ALL ON TABLE tbm_grupo TO myuser;
型
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#
你应该执行下一个查询:
字符串
或者,如果你的错误是在一个视图中,那么可能表没有权限,所以你应该执行下一个查询:
型