【问题标题】:postgres read only user not workingpostgres只读用户不工作
【发布时间】:2015-05-16 06:13:56
【问题描述】:

我有运行数据库的 Postgresql 9.2,现在尝试创建一个只读用户。我遵循了这些描述:

ERROR: permission denied for relation tablename on Postgres while trying a SELECT as a readonly user

How do you create a read-only user in PostgreSQL?

基本上我做了以下事情:

jbossmanager=# CREATE USER jbcust  WITH ENCRYPTED PASSWORD '#######';
CREATE ROLE
jbossmanager=# GRANT USAGE ON SCHEMA jbossmanager to jbcust;
GRANT
jbossmanager=# ALTER DEFAULT PRIVILEGES IN SCHEMA jbossmanager GRANT SELECT ON TABLES TO jbcust;
ALTER DEFAULT PRIVILEGES
jbossmanager=# GRANT CONNECT ON DATABASE jbossmanager to jbcust;
GRANT
jbossmanager=# GRANT SELECT ON ALL SEQUENCES IN SCHEMA jbossmanager TO jbcust;
GRANT
jbossmanager=# GRANT SELECT ON ALL TABLES IN SCHEMA jbossmanager TO jbcust;
GRANT

在此之后,“\l”显示如下:

jbossmanager=# \l
                                     List of databases
 Name     |    Owner     | Encoding |   Collate   |    Ctype    |       Access privileges
--------------+--------------+----------+-------------+-------------+-------------------------------
 jbossmanager | jbossmanager | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/jbossmanager             +
          |              |          |             |             | jbossmanager=CTc/jbossmanager+
          |              |          |             |             | jbcust=c/jbossmanager

这对我来说看起来不错,该数据库/模式中的表列表也很好:

jbossmanager=# \dp+
                                                   Access privileges
    Schema    |             Name              |   Type   |         Access privileges         | Column access privileges
--------------+-------------------------------+----------+-----------------------------------+--------------------------
 jbossmanager | env_server_standalone_info    | table    | jbossmanager=arwdDxt/jbossmanager+|
              |                               |          | jbcust=r/jbossmanager             |

但是现在当我作为这个 jbcust 用户连接到数据库并尝试时:

#psql -d jbossmanager -U jbcust -h 127.0.0.1
Password for user jbcust:
psql (9.2.4)
Type "help" for help.

jbossmanager=> \dp+
                          Access privileges
 Schema | Name | Type | Access privileges | Column access privileges
--------+------+------+-------------------+--------------------------
(0 rows)

我不知道哪里出了问题或缺少了什么。

非常感谢您的帮助!

【问题讨论】:

  • 使用相同的连接设置我无法重现该错误。您是否以与第一个示例相同的方式与psql 连接?
  • 您是否 100% 确定要连接到同一主机上的同一数据库?
  • 在第一个例子中我像这样连接:# psql -d jbossmanager -U jbossmanager -h 127.0.0.1 在第二种情况下是这样的:# psql -d jbossmanager -U jbcust -h 127.0.0.1 是,我确信这是同一主机上的同一个数据库。

标签: postgresql configuration permissions readonly postgresql-9.2


【解决方案1】:

与只读用户连接时我没有看到任何架构的原因是没有设置此用户的默认架构。

之后:

ALTER USER jbcust SET search_path = jbossmanager;

效果很好。

【讨论】:

  • 我的解决方案最终与您的有所不同,但我仍然想提一下,我发现这个问题很有帮助。我已经从互联网上的几个指南中设置了只读用户,但是在这个 GRANT 之后缺少GRANT USAGE ON SCHEMA jbossmanager to jbcust;,我的只读用户工作得很好。谢谢!
猜你喜欢
  • 2020-07-04
  • 2012-11-02
  • 2015-08-08
  • 1970-01-01
  • 2022-01-18
  • 2018-04-08
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多