web-dev-qa-db-fra.com

PG :: InsufficientPrivilege: ERREUR: autorisation refusée pour la relation schema_migrations rake db: create

J'essaie de créer la base de données dans Rails. Dans postgres, je vois la base de données de développement et de test, mais je reçois une erreur d'autorisation. J'ai essayé de suivre ce lien, ça n'a pas marché pour moi.

Erreur: PG::InsufficientPrivilege: ERROR: permission denied for relation schema_migrations : SELECT "schema_migrations".* FROM "schema_migrations"

Rails: autorisation refusée pour la relation schema_migrations

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  Host: localhost
  username: root
  password:

development:
  <<: *default
  database: svp-chicago_development

Je me connecte à postgres et exécute ces commandes.

psql postgres
CREATE USER root
CREATE DATABASE svp-chicago_development
GRANT ALL PRIVILEGES ON DATABASE svp-chicago_development to root
ALTER DATABASE svp-chicago_development OWNER TO root

Quand je fais \list Je vois que la base de données est là.

15
khoamle

Je suppose que vous avez manqué de créer password pour votre user. Essayez de créer un mot de passe comme suit:

CREATE USER root WITH PASSWORD 'your_new_password';
CREATE DATABASE svp-chicago_development;
GRANT ALL PRIVILEGES ON DATABASE svp-chicago_development to root;
ALTER DATABASE svp-chicago_development OWNER TO root;
8
Khanh Pham

J'ai eu le même problème et j'ai résolu en ajoutant "Superutilisateur" au rôle.

D'abord, répertoriez les utilisateurs et leurs privilèges. Si vous avez suivi les commandes ci-dessus, l'utilisateur root n'a pas d'attributs "Superutilisateur".

postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 other     | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 root      |                                                            | {}

Ensuite, mettez à niveau root pour devenir un "superutilisateur".

postgres=# ALTER USER root WITH SUPERUSER;
ALTER ROLE

Encore une fois, répertoriez les utilisateurs et leurs privilèges. Maintenant, root a "Superuser".

postgres=# \du
                               List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 other     | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 root      | Superuser                                                  | {}

J'espère que cela aide.

32
ohkts11

Juste au cas où quelqu'un d'autre viendrait ici avec le même problème, j'ai essayé de nombreuses autres solutions et celle qui a fonctionné le mieux pour moi était la suivante: Modifier OWNER sur toutes les tables simultanément dans PostgreSQL

  • Cela a fonctionné car mon utilisateur (par exemple root ou postgres) avait des privilèges Superuser donc essayer REASSIGN OWNED donne une erreur lors de la tentative d'assigner system objets
  • ALTER DATABASE n'a pas fonctionné car le problème concerne la propriété d'un objet table et non la propriété DB. La modification du propriétaire sur la base de données ne se propage pas à l'autre objet sur ce schéma de base de données
0
ddreliv