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
がアクセスを許可されているすべてのスキーマをバックアップするには、ユースケースとともにユーザーのアクセス権に焦点を当てる必要があります。
どのようにして可能ですか?何が欠けていますか?
パブリックスキーマの使用権限がsalesuserから取り消されたようです。そのため、データをダンプするときに、権限拒否エラーが発生します。 パブリックスキーマの制限
pg_dumpは、通常、データベースのすべてのスキーマ(販売および公開)をバックアップします。したがって、pg_dumpを取得する際に-n salesまたは--schema = schema_nameを明示的に言及する必要があります。
Psqlで\ dn +コマンドを発行して、スキーマとアクセス許可を表示できます。