web-dev-qa-db-ja.com

PG :: InsufficientPrivilege:エラー:リレーションschema_migrations rake db:createの許可が拒否されました

Railsでデータベースを作成しようとしています。 postgresでは、開発およびテストデータベースが表示されますが、アクセス権エラーが発生しています。私はこのリンクをたどろうとしましたが、うまくいきませんでした。

エラー:PG::InsufficientPrivilege: ERROR: permission denied for relation schema_migrations : SELECT "schema_migrations".* FROM "schema_migrations"

レール:関係schema_migrationsのアクセス許可が拒否されました

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

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

Postgresにログインして、これらのコマンドを実行しました。

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

私がする時 \listデータベースがあります。

15
khoamle

passworduserを作成できなかったと思います。次のようにパスワードを作成してください。

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

私は同じ問題を抱えていたので、ロールに「スーパーユーザー」を追加して解決しました。

最初に、ユーザーとその特権をリストします。上記のコマンドに従った場合、rootユーザーには「スーパーユーザー」属性がありません。

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

次に、ルートを「スーパーユーザー」にアップグレードします。

postgres=# ALTER USER root WITH SUPERUSER;
ALTER ROLE

繰り返しますが、ユーザーとその特権をリストします。これでルートには「スーパーユーザー」がいます。

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

それが役に立てば幸い。

32
ohkts11

他の誰かが同じ問題でここに来た場合に備えて、私は他の多くの解決策を試してみましたが、私にとって最も効果的なものは次のとおりでした: PostgreSQLのすべてのテーブルのOWNERを同時に変更

  • これは私のユーザー(例えばrootまたはpostgres)がSuperuser特権を持っていたので、うまくいきました REASSIGN OWNEDsystemオブジェクト
  • ALTER DATABASE は、DB所有権ではなくテーブルオブジェクト所有権に問題があるため、機能しませんでした。 DBの所有者を変更しても、そのDBスキーマの他のオブジェクトに伝播しません
0
ddreliv