2011-10-13 1 views
15

Ho un utente: user_x che possiede un database PostgreSQL e non ha attributi RUOLO come (CREATE_DB, SUPERUSER, ...)Il proprietario del database postgresql non può accedere al database - "Nessuna relazione trovata".

Questo user_x può accedere l'intero DB, creare le tabelle (sul suo database), selezionare, inserire e aggiornare i dati.

Ho questo elenco di database:

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) 

e i seguenti ruoli:

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 

... 

Va bene, finché io dump dei dati e il ripristino su un altro server PostgreSQL.

Dopo l'importazione dei dati con su un altro server (con lo stesso nome del database e utente) e loggato psql il \ d risposta comando con: "Nessun rapporto trovato."

così ho aggiunto SUPERUSER ruolo da user_x sul server di database importato e Tada user_x possono vedere i rapporti ei dati di nuovo.

Ma user_x non è necessario disporre del privilegio SUPERUSER per accedere a questo database.

Cosa c'è di sbagliato in questo dump importato? Qualcuno ora come risolvere questo?

risposta

47

Forse le autorizzazioni dello schema per lo schema public sono state alterate. Qual è l'output di \dn+ su entrambi i siti?

L'output dovrebbe essere simile a questo:

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

Se la parte =UC/postgres manca, è possibile ripristinare con

grant all on schema public to public; 
+0

Hi there A.H. abilità ninja necessari. Avevi ragione! I privilegi di accesso erano nulli. – AndreDurao

+3

Ahh molte grazie per quelle 3 ore della mia vita che mi hai appena restituito con questo! – cjauvin

+0

Cosa rappresenta il 'c' nel permesso, quindi posso aggiungerlo da solo, invece di aggiungere tutti i permessi non voglio essere aggiunto? –

Problemi correlati