Владелец базы данных postgresql не может получить доступ к базе данных - «отношения не найдены» - PullRequest
24 голосов
/ 13 октября 2011

У меня есть пользователь: 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 на команду: «Не найдено отношений.»

Итак, я добавил SUPERUSER роль для user_x на импортированном сервере базы данных, и tadã user_x снова может видеть отношения и данные.

Но user_x не должен иметь привилегию SUPERUSER для доступа к этой базе данных.

Что не так с этим импортированным дампом? Кто-нибудь сейчас как это решить?

1 Ответ

59 голосов
/ 13 октября 2011

Возможно, разрешения для схемы 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...