私は、外部テーブルを作成できるように制限された権限を持つユーザーを設定しようとしています。2つのデータベースがhr_db
ありaccounting_db
ます。のhr_user
ユーザーhr_db
とのaccounting_user
ユーザーを作成しましたaccounting_db
。accounting_user
ユーザーにhr_db
、users
テーブルなどの一部のテーブルに対する選択権限のみを付与したい。これを行うには、スーパーユーザーとしてhr_db
データベースにアクセスして実行しました。
GRANT CONNECT ON DATABASE hr_db TO accounting_user;
GRANT SELECT ON people TO accounting_user;
私はへの接続を設定hr_db
からaccounting_db
外国データラッパを使用しました:
CREATE SERVER hr_db FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'localhost', dbname 'hr_db', port '5432');
次に、accounting_user
ユーザーのマッピングを追加しました。
CREATE USER MAPPING FOR accounting_user SERVER hr_db
OPTIONS (user 'accounting_user', password 'secretpassword');
のパスワードaccounting_user
は、コマンドラインからのログインに使用するものと同じです。これはうまくいきます:
psql -U accounting_user -W hr_db
[enter accounting_user password]
SELECT * FROM people LIMIT 10;
ユーザーaccounting_db
としてデータベースに通常のテーブルを作成できますaccounting_user
。
psql -U accounting_user -W accounting_db
[enter accounting_user password]
CREATE TABLE test (person_id integer NOT NULL);
DROP TABLE test;
しかし、外部テーブルを作成しようとすると:
CREATE FOREIGN TABLE hr_people (person_id integer NOT NULL)
SERVER hr_db OPTIONS (table_name 'people');
ERROR: permission denied for foreign server hr_db
スーパーユーザーとして、hr_people
外部テーブルを作成できます。外部テーブルにaccounting_user
アクセスできます。したがって、外部データ接続hr_db
は正しいようです。accounting_user
外部テーブルを作成および削除できるようにするには、他に何を指定する必要がありますか?
ERROR: only superuser can change options of a file_fdw foreign table
今...☹️