2011-10-13 21 views
15

Mam użytkownika: user_x który jest właścicielem bazy danych PostgreSQL i nie ma żadnego atrybutu ROLE jak (CREATE_DB, superuser, ...)Właściciel bazy danych PostgreSQL nie może uzyskać dostępu do bazy danych - "Nie znaleziono relacji".

Ten user_x może uzyskać dostęp do całej DB, tworzenie tabel (na jego baza danych), wybierz, wstaw i aktualizuj dane.

Mam tę listę baz danych:

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) 

oraz następujące role:

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 

... 

porządku, dopóki nie zrzutu danych i przywrócić go na inny serwer PostgreSQL.

Po importu danych z innego serwera (o tej samej nazwie z bazy danych i użytkownika) i rejestrowane na psql \ d odpowiedź komenda z: „żadne powiązania znaleźć.”

Więc dodałem SUPERUŻYTKOWNIK rolę user_x na importowany serwera bazy danych i Tada user_x można zobaczyć relacje i dane ponownie.

Ale user_x nie musi mieć uprawnień SUPERUSER, aby uzyskać dostęp do tej bazy danych.

Co jest nie tak z tym zaimportowanym zrzutem? Czy ktoś może teraz rozwiązać ten problem?

Odpowiedz

47

Być może uprawnienia schematu dla schematu public zostały zniekształcone. Jakie jest wyjście z \dn+ na obu stronach?

Wyjście powinno wyglądać tak:

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

Jeśli =UC/postgres część brakuje, można przywrócić go z

grant all on schema public to public; 
+0

Cześć A. H. umiejętności ninja musi mieć. Miałeś rację! Uprawnienia dostępu były zerowe. – AndreDurao

+3

Ahh wielkie dzięki za te 3 godziny mojego życia, które właśnie dałeś mi z powrotem z tym! – cjauvin

+0

Co oznacza symbol "c" w uprawnieniu, więc mogę dodać, że zamiast dodawać wszystkie uprawnienia, nie chcę go dodawać? –

Powiązane problemy