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
によって作成されたテーブルの読み取りまたは書き込みはできません。
何が悪いのですか?
これは、いずれかのスキーマのテーブルが別のロールによって作成されているためです(私はread_write_create_user
)デフォルトの権限が定義されたもの(つまり、あなた、または上記の一連のステートメントを実行するロール)よりも。
私の以前の答え でもう少し説明があります。