问题概述
登录PostgreSQL最高权限用户,通过命令查询到授权用户的权限,本例子中已经给只读用户read_only_user授予了只读权限,通过在最高权限用户终端输入如下命令可以查看到只读用户权限授权成功:
select * from information_schema.table_privileges where grantee='read_only_user';
查询结果如下图所示:
我本以为这样就算是授权成功了,准备和下一模块交互的时候,模块负责人说只读模块的只读功能没法使用。于是我登陆只读用户账户,在该账户终端使用select
进行数据库查询的时候显示如下bug:
[2024-04-10 19:24:28] 已连接
postgres.scadb> select * from table
[2024-04-10 19:24:29] [42501] ERROR: permission denied for table cpeentry
当即就让我更改bug,经过几个小时的研究下,找到了如下解决办法。
解决办法
首先登陆最高权限用户账号,然后输入如下命令:
grant USAGE on SCHEMA table to read_only_user ;
给用户授予表的使用权限,这里例子为只读用户read_only_user,再在只读用户终端输入select
进行数据库查询操作,发现只读用户的只读权限生效了,只读用户可以正常进行数据库的读取操作。
当然其他的用户例如只读用户write_only_user以及读写权限均有的用户write_read_user,遇到类似的bug也可以使用该方法解决问题。