web-dev-qa-db-ja.com

読み取り/書き込みPostgresqlユーザーを作成できません

Postgresデータベースに2人のユーザーを作成しようとしています。1人は2つのスキーマのすべてのテーブルへの読み取り/書き込みアクセス権を持ち、もう1人は同じスキーマへの読み取り/書き込み-作成(つまり、DDL変更を行うことができます)を持つユーザーです。

私は現在これらの声明を持っています。

CREATE SCHEMA
    schema_a;

CREATE SCHEMA
    schema_b;

CREATE ROLE read;
CREATE ROLE read_write;
CREATE ROLE read_write_create;

GRANT USAGE ON SCHEMA schema_a, schema_b TO read;
GRANT SELECT ON ALL TABLES IN SCHEMA schema_a, schema_b TO read;

GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA schema_a, schema_b TO read_write;
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA schema_a, schema_b TO read_write;

GRANT ALL ON SCHEMA schema_a, schema_b TO read_write_create;

GRANT read to read_write;
GRANT read_write to read_write_create;

ALTER DEFAULT PRIVILEGES IN SCHEMA schema_a, schema_b GRANT SELECT ON TABLES TO read;
ALTER DEFAULT PRIVILEGES IN SCHEMA schema_a, schema_b GRANT SELECT ON SEQUENCES TO read;
ALTER DEFAULT PRIVILEGES IN SCHEMA schema_a, schema_b GRANT INSERT, UPDATE, DELETE ON TABLES TO read_write;
ALTER DEFAULT PRIVILEGES IN SCHEMA schema_a, schema_b GRANT SELECT, UPDATE ON SEQUENCES TO read_write;

CREATE USER
    read_write_user
WITH PASSWORD
    'a_password';

GRANT read_write TO read_write_user;

CREATE USER
    read_write_create_user
WITH PASSWORD
    'another_password';

GRANT read_write_create TO read_write_create_user;

これらを実行した後、read_write_create_userはテーブルを作成し、すべてのテーブルの読み取りと書き込みを行うことができます。ただし、read_write_userは、read_write_create_userによって作成されたテーブルの読み取りまたは書き込みはできません。

何が悪いのですか?

2
Kris Harper

これは、いずれかのスキーマのテーブルが別のロールによって作成されているためです(私はread_write_create_user)デフォルトの権限が定義されたもの(つまり、あなた、または上記の一連のステートメントを実行するロール)よりも。

私の以前の答え でもう少し説明があります。

1
dezso