次のコマンドを使用してデータベースを復元しようとします。
$ sudo -u postgres pg_restore -C -d dvdrental dvdrental.tar
[sudo] password for t:
ただし、次のエラー メッセージが表示されます。
ディレクトリを次に変更することはできません。"/home/t/mydata/.../relational model/SQL/implementations/Implementations、つまりリレーショナルデータベース管理システム/postgreSQL/general/web/postgresqltutorial/databases":権限が拒否されました
pg_restore:[archiver]は入力ファイル 'dvdrental.tar'を開くことができません:そのファイルまたはディレクトリはありません
権限が拒否された現在のディレクトリにディレクトリを変更できないのはなぜですか?
ファイル権限ビットは次のとおりです。
-rw-rw-r-- 1 t t 2838016 May 26 2013 dvdrental.tar
親ディレクトリの1つを誰も読んで実行できないからですか?このファイルには親ディレクトリがたくさんあります。どうやって確認できますか?
答え1
あなたはできますが、ユーザーはpostgres
できません。
sudo -u postgres
user-idをpostgresに変更してコマンドを実行します。これで、ユーザーpostgresは入力ファイルだけでなく現在のディレクトリにもアクセスできません。
代わりに、次の操作を行います。
$ sudo -u postgres pg_restore -C -d dvdrental < dvdrental.tar
これにより、sudoが開始される前にファイルがユーザーアカウントのシェルで開き、pg_restore
標準入力のファイル内容にアクセスされます。
答え2
現在のディレクトリとすべての親ディレクトリにはユーザーがアクセスできる必要がありますpostgres
。つまり権限を決定するときに、各ディレクトリに適用される所有者/グループ/その他の権限に対して実行可能/検索可能ビットを設定するか、postgres
ACLを使用してその権限を付与します。
権限を確認するには、以下を使用してくださいnamei
。
namei -l /path/to/directory
バラよりユーザーが特定のファイルにアクセスできることを確認する方法は?もっと学ぶ。