web-dev-qa-db-ja.com

関係<テーブル>の許可が拒否されました

私はpsqlで次のSQLを実行しました。

CREATE USER bspu LOGIN;

CREATE DATABASE bsp OWNER bspu;

GRANT ALL PRIVILEGES ON DATABASE bsp TO bspu;

\c bsp

CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  client_id VARCHAR(20) NOT NULL,
  api_key VARCHAR(100) NOT NULL,
  api_secret VARCHAR(100) NOT NULL,
  auth_token VARCHAR(128) NOT NULL
);

bspuとしてログインし、usersテーブルをクエリしようとすると、エラーが発生します。

permission denied for relation users

私は走ってみました:

ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO bspu;

しかし、それは助けにはなりません。何が悪いのですか?データベース所有者が自分のデータベースをクエリする権限を持っていないのはなぜですか?

編集:私はbspuを今のところスーパーユーザーにアップグレードしたので、作業を続けることができます。それ以上のガイダンスはありがたいです。

12

DEFAULT PRIVILEGES donotexistingオブジェクトのアクセス許可を変更します。これらは、新しく作成されたオブジェクトのデフォルトの特権であり、それらが属する特定のロールのみに対するものです。 ALTER DEFAULT PRIVILEGESの実行時にロールを定義しない場合、デフォルトでcurrentロールに設定されます(ALTER DEFAULT PRIVILEGESステートメントの実行時)。

また、 serial を作成する SEQUENCE 列を使用しているため、シーケンスのデフォルトの権限を次のように設定する必要があります。上手。

オブジェクトを作成したユーザーでこれを実行します。beforeあなたがCREATEを実行するコマンド:

ALTER DEFAULT PRIVILEGES [ FOR ROLE my_create_role] GRANT ALL ON TABLES TO bspu;
ALTER DEFAULT PRIVILEGES [ FOR ROLE my_create_role] GRANT ALL ON SEQUENCES TO bspu;

PgAdminを使用する必要がある場合は、注意が必要です。現在のバージョン1.20(またはそれ以前)には、DEFAULT PRIVILEGESのリバースエンジニアリングされたSQLスクリプトの表示にバグがあります。表示は所有ユーザーを無視するため、特定の状況では正しくありません。 私はバグを報告しました、問題は保留中です

existingオブジェクトの場合、この「バッチ」形式の GRANTコマンド にも興味があるかもしれません。

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO bspu;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO bspu;

SOに関するこの関連質問の詳細:

22