パスワードの入力を求められないようにpsqlを呼び出すにはどうすればよいですか?
これは私が持っているものです:
psql -Umyuser < myscript.sql
ただし、パスワードを渡す引数が見つからなかったため、psqlは常にパスワードの入力を求めます。
パスワードの入力を求められないようにpsqlを呼び出すにはどうすればよいですか?
これは私が持っているものです:
psql -Umyuser < myscript.sql
ただし、パスワードを渡す引数が見つからなかったため、psqlは常にパスワードの入力を求めます。
PostgreSQL への認証方法の概要を読みたいと思うかもしれません。
あなたの質問に答えるために、パスワードベースの認証にパスワードを提供する方法がいくつかあります。
パスワードプロンプト経由。例:
psql -h uta.biocommons.org -U foo
Password for user foo:
pgpass ファイル内。libpq-pgpassを参照してください。フォーマット:
<host>:<port>:<database>:<user>:<password>
PGPASSWORD
環境変数で。libpq-envarsを参照してください。例:
export PGPASSWORD=yourpass
psql ...
# Or in one line for this invocation only:
PGPASSWORD=yourpass psql ...
接続文字列内 パスワードおよびその他のオプションは、接続文字列/URI で指定できます。app-psqlを参照してください 。例:
psql postgresql://username:password@dbmaster:5433/mydb?sslmode=require
PGPASSWORD=[your password] psql -Umyuser < myscript.sql
スクリプトの先頭に次のコマンドラインを追加できます。
set PGPASSWORD=[your password]
私のような Windows (私は Windows 7 64 ビットを使用しています) で問題が発生し、機能set PGPASSWORD=[Password]
しなかった場合。
それから、Kavaklioglu がコメントの 1 つで言ったように、
export PGPASSWORD=[password]
これをファイルの先頭に保存するか、使用する前に保存する必要があるため、呼び出される前に設定されます。
確かにWindowsで動作します:)
パスワードファイルを作成する必要があります。詳細については、http ://www.postgresql.org/docs/9.0/interactive/libpq-pgpass.htmlを参照してください。
PGPASSWORD 環境変数の使用に関するセキュリティ上の懸念を考えると、最善の全体的な解決策は次のようになると思います。
ここで注意すべき点がいくつかあります。ステップ 1 は、存在する可能性のあるユーザーの ~/.pgpass ファイルをいじるのを避けるためにあります。また、ファイルのアクセス許可が 0600 以下であることも確認する必要があります。
次のように、bash を利用してこれをショートカットすることを提案する人もいます。
PGPASSFILE=<(echo myserver:5432:mydb:jdoe:password) psql -h myserver -U jdoe -p 5432 mydb
これは <() 構文を使用して、データを実際のファイルに書き込む必要がないようにします。しかし、psql はどのファイルが使用されているかをチェックし、次のようなエラーをスローするため、機能しません。
WARNING: password file "/dev/fd/63" is not a plain file
* nixシェルスクリプトに慣れていない人向けのmightybyteの回答に基づいて、次の作業スクリプトを示します。
#!/bin/sh
PGPASSFILE=/tmp/pgpasswd$$
touch $PGPASSFILE
chmod 600 $PGPASSFILE
echo "myserver:5432:mydb:jdoe:password" > $PGPASSFILE
export PGPASSFILE
psql mydb
rm $PGPASSFILE
2 行目の 2 つのドル記号 ( $$
)/tmp/pgpasswd$$
は、プロセス ID 番号をファイル名に追加するため、このスクリプトは副作用なしで同時に複数回実行できます。
chmod
4行目のコマンドの使用に注意してください.mightybyteが説明した「プレーンファイルではありません」エラーと同様に、これを行わないと「権限」エラーも発生します.
7 行目では、デフォルト ( localhost : 5432 ) を使用し、データベース ユーザーが 1 つしかない場合、 -h
myserver、-p
myport、または-U
jdoeフラグを使用する必要はありません。複数のユーザーの場合 (ただし、デフォルトの接続)、その行を次のように変更します。
psql mydb jdoe
スクリプトを実行可能にすることを忘れないでください
chmod +x runpsql
(またはスクリプトファイルと呼んだもの)
アップデート:
私はRichVelのアドバイスを受けて、パスワードを入れる前にファイルを読み取れないようにしました。これにより、わずかなセキュリティ ホールが閉じます。ありがとう!
これは役に立つかもしれません: Windows PSQL コマンド ライン: パスワードなしのログインを許可する方法はありますか?
psql は PGPASSWORD 変数を定義してもパスワードプロンプトを表示することがわかりましたが、psql に -w オプションを指定してパスワードプロンプトを省略することができます。
コマンドで -w を使用します: psql -h localhost -p 5432 -U user -w