web-dev-qa-db-ja.com

Postgresのロールとユーザー-テーブルの権限が拒否されました

https://aws.Amazon.com/blogs/database/managing-postgresql-users-and-roles/ の指示に従って、RDSで実行するPostgres 11.2データベースを構成しました

  1. RDSの作成中に作成したマスターユーザーとしてログインしました
  2. 実行済みCREATE SCHEMA myschema;
  3. 上記のリンクから実行されたスクリプト
-- 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によって作成されたすべてのテーブルへの読み取りアクセス権が必要です。

5
Domajno

既存のエンティティにのみ許可を適用し、将来のテーブルに特権を適用しないのはPostgresの動作だと思います。 readonlyユーザーの許可クエリを再実行して、新しく作成したテーブルの権限を更新する必要があります。または、ここで説明されているように、これを自動的に実行するトリガーを設定できます

postgresqlで作成されたすべての新しいテーブルに対してユーザーにアクセス許可を付与

0
Juned Ahsan