【问题标题】:postgresql database owner can't access database - "No relations found."postgresql 数据库所有者无法访问数据库 - “未找到关系。”
【发布时间】:2011-12-07 04:42:06
【问题描述】:

我有一个用户:user_x,它在 postgresql 上拥有一个数据库,并且没有任何 ROLE 属性,例如 (CREATE_DB, SUPERUSER,...)

这个 user_x 可以访问整个数据库、创建表(在他的数据库上)、选择、插入和更新数据。

我有这个数据库列表:

mydatabase=> \l
                                     List of databases
          Name           |  Owner   | Encoding  | Collation | Ctype |   Access privileges   
-------------------------+----------+-----------+-----------+-------+-----------------------
 postgres                | postgres | SQL_ASCII | C         | C     | 
 mydatabase              | user_x   | UTF8      | C         | C     | 
 template0               | postgres | SQL_ASCII | C         | C     | =c/postgres          +
                         |          |           |           |       | postgres=CTc/postgres
 template1               | postgres | SQL_ASCII | C         | C     | =c/postgres          +
                         |          |           |           |       | postgres=CTc/postgres
 whoami                  | postgres | SQL_ASCII | C         | C     | 
(6 rows)

以及以下角色:

mydatabase=> \du
                       List of roles
 Role name |            Attributes             | Member of 
-----------+-----------------------------------+-----------
 postgres  | Superuser, Create role, Create DB | {}
 user_x    |                                   | {}

mydatabase=> \d
                        List of relations
 Schema |               Name                |   Type   |  Owner   
--------+-----------------------------------+----------+----------
 public | addresses                         | table    | user_x
 public | addresses_id_seq                  | sequence | user_x
 public | assignments                       | table    | user_x
 public | assignments_id_seq                | sequence | user_x

 ...

好吧,直到我转储数据并在另一个 postgresql 服务器上恢复它。

在另一台服务器(具有相同的数据库名称和用户)上导入数据并登录 psql 后,\d 命令回复:“未找到关系。”

所以我在导入的数据库服务器上为 user_x 添加了 SUPERUSER 角色,然后用户_x 可以再次看到关系和数据。

但是 user_x 不需要拥有 SUPERUSER 权限来访问这个数据库。

这个导入的转储有什么问题? 有人现在如何解决这个问题吗?

【问题讨论】:

    标签: postgresql user-permissions


    【解决方案1】:

    也许public 架构的架构权限被破坏了。 \dn+ 在两个站点上的输出是什么?

    输出应如下所示:

                              List of schemas
      Name  |  Owner   |  Access privileges   |      Description       
    --------+----------+----------------------+------------------------
     public | postgres | postgres=UC/postgres | standard public schema
                       : =UC/postgres           
    (1 row)
    

    如果=UC/postgres 部分丢失,您可以使用

    恢复它
    grant all on schema public to public;
    

    【讨论】:

    • 您好,您必须具备 A.H. 忍者技能。你是对的!访问权限为空。
    • 非常感谢我生命中的 3 个小时,你刚刚还给了我这个!
    • 权限中的c代表什么,所以我可以自己添加,而不是添加我不想添加的所有权限?
    • @WorstForum:cCREATEuUSAGE。这些是架构支持的唯一权限。
    • 实际上,就安全性而言,提供GRANT ALL ON SCHEMA public TO public 并不是一个好主意,因为它授予所有用户使用和创建公共架构的权限。也许GRANT USAGE ON SCHEMA public TO user_x; 就足够了。我在这里找到了“访问权限”列的一个很好的详细解释:severalnines.com/blog/…
    猜你喜欢
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    相关资源
    最近更新 更多