web-dev-qa-db-ja.com

.pgpassとpostgreSQLが機能しない

/folder/.pgpassに.pgpassファイルを配置しました。

*:*:*:postgres:password_for_postgres

PostgreSQLからデータベースをバックアップするbashスクリプトがあります。

#!/bin/bash
export PGPASSFILE=/folder/.pgpass
echo $PGPASSFILE
pg_dump --username=postgres --format=c --file=/backup/db/db.sqlc database

しかし、スクリプトはまだパスワードを要求します。 PGPASSFILEは、私が見る限り、必要な値を持っています。問題の可能性に関するヒントはありますか?

/ K

13

Pgpassファイルはモード0600に設定されていますか(つまり、所有者のみが読み書きできる)?クライアントライブラリは、グループまたは全世界で読み取り可能な場合は無視します。

8
araqnid

私の構成(Ubuntu 10.04.3およびPostgreSQL 8.4)では、-ログインしているユーザー名が、パスワードを取得しようとしているユーザー名と同じ場合、最終的に機能させることができます.pgpassファイル。

deployerとしてログインし、.pgpassファイルを使用して、同等のUnixユーザーがいないユーザー名appnameが所有するデータベースにアクセスしようとしました。データベースにアクセスするユーザーとしてdeployerを使い始めるまで、.pgpassを機能させることができませんでした...

これが私の/home/deployer/.pgpassファイルの内容です。

*:*:*:deployer:password

/etc/postgresql/8.4/main/pg_hba.confの一部:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD                                                

# "local" is for Unix domain socket connections only                                                        
local   all         all                               md5                                                   
# IPv4 local connections:                                                                                   
Host    all         all         127.0.0.1/32          md5                                                   
Host    all         all         192.168.0.1/32        md5                                                   
# IPv6 local connections:                                                                                   
Host    all         all         ::1/128               md5 

ご覧のとおり、すべての接続にはパスワード(md5)が必要です。

この構成では、次のコマンドで作成したデータベースがあると想定しています。

deployer@ubuntu-server:~$ createdb -T template0 -O deployer -E UTF8 dbname

パスワードを入力せずに次の操作を実行できます。

deployer@ubuntu-server:~$ dropdb dbname

.pgpassの名前を.pgpass-noに変更するとすぐに、パスワードが必要になります。

ところで、あなたの.pgpassファイルは0600権限の下になければならないことを忘れないでください:

deployer@ubuntu-server:~$ ls -la .pgpass
-rw------- 1 deployer staff 24 2012-01-06 17:29 .pgpass
5

1)内容を含む.pgpassファイルを作成する

ホスト:5432:somedb:someuser:somepass

2)コマンドを使用して権限を設定する

Sudo chmod 600 .pgpass

3)ファイル所有者を、ログインに使用したのと同じユーザーとして設定します。

Sudo chown login_username:login_username .pgpass

4)PGPASSFILE環境変数を設定します。

pGPASSFILE = '/ home/user/.pgpass'をエクスポートします

次に、データベースに接続して確認します。

psql -hホスト-U someuser somedb

パスワードの入力を求めず、postgresqlにログインしません。

0
Shrinivas