私は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
を今のところスーパーユーザーにアップグレードしたので、作業を続けることができます。それ以上のガイダンスはありがたいです。
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に関するこの関連質問の詳細: