web-dev-qa-db-ja.com

Postgres:非対話型スクリプトでpostgresユーザーとして認証します

Postgresコマンドを実行する必要がある非対話型スクリプトを書いています。スクリプトはrootまたはSudo権限を持つユーザーによってのみ実行され、postgresコマンドはpostgresqlでpostgresユーザーとして実行する必要があります。問題は、postgresqlが常に(私が知る限り)対話的にパスワードの入力を求めるか(つまり、pqsl -U postgres -W)、パスワードをまったく受け入れない(つまり、psql -U postgres -w)ことです。 mysqlがmysql -u user -p passwordを許可するのと同じように、コマンドラインでパスワードを渡したいと思います。 postgresでこれを行うにはどうすればよいですか?

2
jayhendren

同じことを行うには2つの方法があります。

アプローチ1:

ユーザー(スクリプトを実行するユーザー)のホームディレクトリに.pgpassファイルを追加します。

$ cat /home/user/.pgpass
hostname:port:database:user:password
$ chmod 600 /home/user/.pgpass

上記を追加した後、使用するスクリプトにパスワードを追加する必要はありません。直接接続します。

アプローチ2:

シェルスクリプトに以下を追加します。ただし、これによりパスワードが公開され、リポジトリにコミットする場合に問題が発生します。

export PGPASSWORD=password
2
soumyaranjan

PGPASSWORD環境変数を使用します。例えば:

PGPASSWORD=<password> psql -U postgres -c "<postgresql query>"

ソース

4
jayhendren

Psqlをユーザーpostgresとして実行できる場合、最も有用な解決策はpg_hba.confを変更して、localhost/socketを介して接続するUnixユーザーpostgresがパスワードまたは外部ファイルなしで認証されるようにすることです。ファイルの先端に、これを挿入します。

local all postgres  peer

これは、TBMIがデフォルトです。おそらく誰かが、この行idkを削除したときに、賢い、またはより安全だと思ったのでしょう。次のようなものをモニトロ化サービスに使用することもできます。

local zabbix zabbix peer

「zabbix」という名前のユーザー名とデータベースを作成します。

1
Otheus