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

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

postgresコマンドの実行に必要な非対話型スクリプトを作成しています。このスクリプトはroot特権を持つユーザーだけを実行できsudo、postgresコマンドはpostgrespostgresqlでユーザーとして実行する必要があります。問題は、postgresqlがいつも(私が知っている限り)、対話的にパスワードを求めるメッセージを表示したり(たとえば)、pqsl -U postgres -Wパスワードをまったく許可しないことです(たとえば)psql -U postgres -w。 mysqlが許可する方法と同様に、コマンドラインからパスワードを渡したいと思いますmysql -u user -p password。 Postgresでこれを行うにはどうすればよいですか?

答え1

PGPASSWORD環境変数を使用してください。たとえば、

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

源泉

答え2

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

方法1:

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

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

上記の項目を追加したら、使用するスクリプトにパスワードを追加する必要はありません。すぐに接続されます。

方法2:

シェルスクリプトに次の内容を追加します。ただし、これによりパスワードが公開され、リポジトリにコミットすると問題になります。

export PGPASSWORD=password

答え3

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

local all postgres  peer

この時点では、TBMIはデフォルトです。たぶん、誰かがこのラインを取り除いたとき、自分がよりスマートであるか、より安全であると思ったかもしれません。監視サービスには次のものを使用することもできます。

local zabbix zabbix peer

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

関連情報