web-dev-qa-db-ja.com

ユーザーが1つのスキーマのみにアクセスできるPostgreSQLデータベース(スキーマ)をバックアップする方法

Postgresでsalesスキーマを作成しました。 (つまり、合計でsalesとデフォルトのpublicスキーマがあります)

ユーザーsalesuserをPostgresに追加し、salesスキーマへのアクセスを許可しました。

これは私がそれをした方法です:

CREATE ROLE salesuser WITH LOGIN PASSWORD 'password';
GRANT CONNECT ON DATABASE database_name TO salesuser;
GRANT USAGE ON SCHEMA sales TO salesuser;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA sales TO salesuser;
ALTER ROLE salesuser SET search_path to sales;

ここで、pg_dumpとユーザーsalesを使用して、スキーマsalesuserのバックアップを作成しようとしています。 ユーザーsalesがアクセスを許可されている唯一のスキーマであるため、予期される結果はスキーマsalesuserのみをバックアップすることです。

私が使用するコマンドは次のとおりです:pg_dump -h localhost -p 5432 -U salesuser -d database_name > /tmp/2223.dmp--schema=または-nパラメーターがないことに注意してください)

残念ながら、以下のエラーが表示されているため、pg_dumpはユーザーpublicがアクセス権を持っていないsalesuserスキーマもダンプしようとしています。

pg_dump: [archiver (db)] query failed: ERROR:  permission denied for relation customer
pg_dump: [archiver (db)] query was: LOCK TABLE public.customer IN ACCESS SHARE MODE

ユーザーを指定したpg_dumpコマンド単一の特定のスキーマにのみアクセスできると想定このスキーマのみをバックアップします、および他のスキーマ(publicなど)は省略されます。

Pg_dumpの-nまたは--schema=パラメータを定義しないようにする必要があります。

ユーザーsalesuserがアクセスを許可されているすべてのスキーマをバックアップするには、ユースケースとともにユーザーのアクセス権に焦点を当てる必要があります。

どのようにして可能ですか?何が欠けていますか?

2
Maciej

パブリックスキーマの使用権限がsalesuserから取り消されたようです。そのため、データをダンプするときに、権限拒否エラーが発生します。 パブリックスキーマの制限

pg_dumpは、通常、データベースのすべてのスキーマ(販売および公開)をバックアップします。したがって、pg_dumpを取得する際に-n salesまたは--schema = schema_nameを明示的に言及する必要があります。

Psqlで\ dn +コマンドを発行して、スキーマとアクセス許可を表示できます。

1
Atty