https://aws.Amazon.com/blogs/database/managing-postgresql-users-and-roles/ の指示に従って、RDSで実行するPostgres 11.2データベースを構成しました
CREATE SCHEMA myschema;
-- Revoke privileges from 'public' role
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON DATABASE mydatabase FROM PUBLIC;
-- Read-only role
CREATE ROLE readonly;
GRANT CONNECT ON DATABASE mydatabase TO readonly;
GRANT USAGE ON SCHEMA myschema TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA myschema TO readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT SELECT ON TABLES TO readonly;
-- Read/write role
CREATE ROLE readwrite;
GRANT CONNECT ON DATABASE mydatabase TO readwrite;
GRANT USAGE, CREATE ON SCHEMA myschema TO readwrite;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA myschema TO readwrite;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO readwrite;
GRANT USAGE ON ALL SEQUENCES IN SCHEMA myschema TO readwrite;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT USAGE ON SEQUENCES TO readwrite;
-- Users creation
CREATE USER reporting_user1 WITH PASSWORD 'some_secret_passwd';
CREATE USER reporting_user2 WITH PASSWORD 'some_secret_passwd';
CREATE USER app_user1 WITH PASSWORD 'some_secret_passwd';
CREATE USER app_user2 WITH PASSWORD 'some_secret_passwd';
-- Grant privileges to users
GRANT readonly TO reporting_user1;
GRANT readonly TO reporting_user2;
GRANT readwrite TO app_user1;
GRANT readwrite TO app_user2;
その後、app_user1
として接続し、新しいテーブルを作成して、1行追加しました。次に、reporting_user1を使用して接続し、その新しいテーブルをSELECT * FROM
しようとしましたが、コンソールに次のメッセージが表示されました。
ERROR: permission denied for table first_table
SQL state: 42501
構成に何が欠けていますか? reporting_user1には、myschema内のapp_user1によって作成されたすべてのテーブルへの読み取りアクセス権が必要です。
既存のエンティティにのみ許可を適用し、将来のテーブルに特権を適用しないのはPostgresの動作だと思います。 readonly
ユーザーの許可クエリを再実行して、新しく作成したテーブルの権限を更新する必要があります。または、ここで説明されているように、これを自動的に実行するトリガーを設定できます