J'ai un utilisateur: user_x qui possède une base de données sur postgresql et n'a pas d'attribut ROLE comme (CREATE_DB, SUPERUSER, ...)
Cet utilisateur_x peut accéder à l'ensemble de la base de données, créer des tables (sur sa base de données), sélectionner, insérer et mettre à jour des données.
J'ai cette liste de bases de données:
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)
et les rôles suivants:
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
...
Très bien, jusqu'à ce que je vide les données et les restaure sur un autre serveur postgresql.
Après avoir importé les données sur un autre serveur (avec le même nom de base de données et le même utilisateur) et connecté à psql, la commande \ d répond: "Aucune relation trouvée."
J'ai donc ajouté SUPERUTILISATEUR rôle à user_x sur le serveur de base de données importé et tadã user_x peut voir à nouveau les relations et les données.
Mais user_x n'a pas besoin d'avoir le privilège SUPERUSER pour accéder à cette base de données.
Quel est le problème avec ce vidage importé? Quelqu'un sait-il maintenant comment résoudre ce problème?
Peut-être que les autorisations de schéma pour le schéma public
ont été modifiées. Quelle est la sortie de \dn+
sur les deux sites?
La sortie devrait ressembler à ceci:
List of schemas
Name | Owner | Access privileges | Description
--------+----------+----------------------+------------------------
public | postgres | postgres=UC/postgres | standard public schema
: =UC/postgres
(1 row)
Si la =UC/postgres
une partie est manquante, vous pouvez la restaurer avec
grant all on schema public to public;