339

パスワードの入力を求められないようにpsql呼び出すにはどうすればよいですか?

これは私が持っているものです:

psql -Umyuser < myscript.sql

ただし、パスワードを渡す引数が見つからなかったため、psqlは常にパスワードの入力を求めます。

4

16 に答える 16

417

PostgreSQL への認証方法の概要を読みたいと思うかもしれません。

あなたの質問に答えるために、パスワードベースの認証にパスワードを提供する方法がいくつかあります。

  1. パスワードプロンプト経由。例:

    psql -h uta.biocommons.org -U foo
    Password for user foo: 
    
  2. pgpass ファイル内libpq-pgpassを参照してください。フォーマット:

    <host>:<port>:<database>:<user>:<password>
    
  3. PGPASSWORD環境変数でlibpq-envarsを参照してください。例:

    export PGPASSWORD=yourpass
    psql ...
    
    # Or in one line for this invocation only:
    PGPASSWORD=yourpass psql ...
    
  4. 接続文字列内 パスワードおよびその他のオプションは、接続文字列/URI で指定できます。app-psqlを参照してください 。例:

    psql postgresql://username:password@dbmaster:5433/mydb?sslmode=require
    
于 2011-06-29T16:39:27.153 に答える
185
PGPASSWORD=[your password] psql -Umyuser < myscript.sql
于 2013-12-04T07:48:24.623 に答える
73

スクリプトの先頭に次のコマンドラインを追加できます。

set PGPASSWORD=[your password]
于 2011-09-19T16:19:53.743 に答える
14

私のような Windows (私は Windows 7 64 ビットを使用しています) で問題が発生し、機能set PGPASSWORD=[Password]しなかった場合。

それから、Kavaklioglu がコメントの 1 つで言ったように、

export PGPASSWORD=[password]

これをファイルの先頭に保存するか、使用する前に保存する必要があるため、呼び出される前に設定されます。

確かにWindowsで動作します:)

于 2014-03-27T16:21:51.263 に答える
12

パスワードファイルを作成する必要があります。詳細については、http ://www.postgresql.org/docs/9.0/interactive/libpq-pgpass.htmlを参照してください。

于 2011-06-29T15:24:55.207 に答える
8

PGPASSWORD 環境変数の使用に関するセキュリティ上の懸念を考えると、最善の全体的な解決策は次のようになると思います。

  1. 使用するパスワードを使用して、独自の一時 pgpass ファイルを作成します。
  2. PGPASSFILE 環境変数を使用して、そのファイルを使用するように psql に指示します。
  3. 一時 pgpass ファイルを削除します

ここで注意すべき点がいくつかあります。ステップ 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
于 2014-12-05T17:36:01.713 に答える
5

* 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 番号をファイル名に追加するため、このスクリプトは副作用なしで同時に複数回実行できます。

chmod4行目のコマンドの使用に注意してください.mightybyteが説明した「プレーンファイルではありません」エラーと同様に、これを行わないと「権限」エラーも発生します.

7 行目では、デフォルト ( localhost : 5432 ) を使用し、データベース ユーザーが 1 つしかない場合、 -hmyserver-pmyport、または-Ujdoeフラグを使用する必要はありません。複数のユーザーの場合 (ただし、デフォルトの接続)、その行を次のように変更します。

psql mydb jdoe

スクリプトを実行可能にすることを忘れないでください

chmod +x runpsqlまたはスクリプトファイルと呼んだもの

アップデート:

私はRichVelのアドバイスを受けて、パスワードを入れるにファイルを読み取れないようにしました。これにより、わずかなセキュリティ ホールが閉じます。ありがとう!

于 2016-11-15T16:11:29.620 に答える
2

これは役に立つかもしれません: Windows PSQL コマンド ライン: パスワードなしのログインを許可する方法はありますか?

于 2011-06-29T15:33:38.613 に答える
-1

psql は PGPASSWORD 変数を定義してもパスワードプロンプトを表示することがわかりましたが、psql に -w オプションを指定してパスワードプロンプトを省略することができます。

于 2017-07-20T09:12:14.097 に答える
-6

コマンドで -w を使用します: psql -h localhost -p 5432 -U user -w

于 2016-12-22T17:43:02.910 に答える