我通过GRANT解决了类似的问题,该用户USAGE ON SCHEMA以OWNER的身份登录该架构。让我开发:
用户故事:我可以使用 Postgres 9.6 重现这种奇怪的行为,请参见下面的控制台输出。那有多奇怪?我可以\dt preprod.users
,但\dt
不会发出任何东西!我也可以在这些表上选择,这真的让我很困惑。
(在search_path中,注意逗号后面的空格,由PostgreSQL自动调整)
do_preprod=> -- I'm logged on as preprod_www_ro, a read-only user who belongs to readonly ROLE.
do_preprod=> SET search_path TO preprod,public;
SET
do_preprod=> SHOW search_path;
search_path
-----------------
preprod, public
(1 row)
do_preprod=> \dt
Did not find any relations.
do_preprod=> \dt users;
Did not find any relation named "users".
do_preprod=> \dt preprod.users;
List of relations
Schema | Name | Type | Owner
---------+-------+-------+-------------
preprod | users | table | preprod_www
(1 row)
然后,以preprod_www
(= 架构所有者)身份登录,我授予readonly
ROLE ( preprod_www_ro
's)USAGE
权限。do_preprod=> GRANT USAGE ON SCHEMA preprod to readonly;
然后,回到preprod_www_ro
,我可以立即看到与 的关系\dt
,完全享受我的search_path
,而无需注销重新登录。
首先,我希望 PostgreSQL 发出更清晰的消息\dt
,或者\dt preprod.users
:“No USAGE ON SCHEMA grant...”或类似的东西,因为实际上用户可以使用它...但并不完全顺利。