回答:
pg_hba.confで適切な設定を行いましたか?
方法については、https://help.ubuntu.com/stable/serverguide/postgresql.htmlを参照してください。
次の手順は、Ubuntu 12.04にpostgres 9.1を新規インストールする場合に機能します。(Ubuntu 14.04のpostgres 9.3.9でも動作しました。)
デフォルトでは、postgresは「postgres」という名前のユーザーを作成します。私たちは彼女としてログインし、彼女にパスワードを与えます。
$ sudo -u postgres psql
\password
Enter password: ...
...
またはpsql
を入力してログアウトします。次に、「postgres」として接続します。一部は重要である:それは伝え、そしてません(パスワードを気にしない)ピア接続によって、我々は(パスワード認証を使用するように構成された)TCPコネクションを使用して接続したいことをクライアントに。\q
ctrl+d
-h localhost
psql
$ psql -U postgres -h localhost
PGHOST=localhost
場合、-h
毎回オプションを指定する必要はありません。これは、pg_*
などの他のコマンドでも機能しますpg_dump
。
ファイル/etc/postgresql/8.4/main/pg_hba.conf
を編集し、自分のコンピュータでパスワードを要求するかどうかに応じて、またはで置き換えるident
かpeer
、md5
またはtrust
で置き換えます。次に、構成ファイルを次のように再ロードします。
/etc/init.d/postgresql reload
restart
ない、私のために働いreload
への変更後--- /etc/postgresql/9.5/main/pg_hba.conf
(変更peer
にtrust
)。
クライアント認証に失敗しているため、このエラーが発生しています。エラーメッセージに基づいて、おそらくデフォルトのpostgres設定があります。これは、すべてのPostgreSQL接続に対してクライアント認証方法を「IDENT」に設定します。
あなたは間違いなくセクションに読んでください19.1クライアント認証をしてPostgreSQLのマニュアル(の各レコードに利用可能な認証設定を理解し、より良いにあるpg_hba.confを)が、ここであなたが抱えている問題のヘルプに関連するスニペットはから(あるバージョン9.5マニュアル):
信頼
無条件に接続を許可します。この方法では、PostgreSQLデータベースサーバーに接続できるすべてのユーザーが、パスワードやその他の認証を必要とせずに、希望するPostgreSQLユーザーとしてログインできます。詳細は19.3.1項を参照してください。
拒否する
無条件に接続を拒否します。これは、グループから特定のホストを「フィルターで除外」するのに役立ちます。たとえば、拒否行は特定のホストの接続をブロックし、後の行は特定のネットワーク内の残りのホストが接続できるようにします。
md5
認証のためにクライアントにダブルMD5ハッシュパスワードを提供するように要求します。詳細は19.3.2項を参照してください。
パスワード
認証のためにクライアントに暗号化されていないパスワードを提供するように要求します。パスワードはクリアテキストでネットワークを介して送信されるため、信頼できないネットワークでは使用しないでください。詳細は19.3.2項を参照してください。
gss
GSSAPIを使用してユーザーを認証します。これは、TCP / IP接続でのみ使用できます。詳細は項19.3.3を参照してください。
sspi
SSPIを使用してユーザーを認証します。これはWindowsでのみ使用できます。詳細は項19.3.4を参照してください。
アイデンティティ
クライアントのidentサーバーにアクセスしてクライアントのオペレーティングシステムユーザー名を取得し、要求されたデータベースユーザー名と一致するかどうかを確認します。Ident認証は、TCP / IP接続でのみ使用できます。ローカル接続に指定すると、代わりにピア認証が使用されます。詳細は項19.3.5を参照してください。
同輩
クライアントのオペレーティングシステムユーザー名をオペレーティングシステムから取得し、要求されたデータベースユーザー名と一致するかどうかを確認します。これはローカル接続でのみ使用できます。詳細は項19.3.6を参照してください。
LDAP
LDAPサーバーを使用して認証します。詳細は19.3.7項を参照してください。
半径
RADIUSサーバーを使用して認証します。詳細は項19.3.8を参照してください。
証明書
SSLクライアント証明書を使用して認証します。詳細は項19.3.9を参照してください。
pam
オペレーティングシステムが提供するPluggable Authentication Modules(PAM)サービスを使用して認証します。詳細は項19.3.10を参照してください。
したがって、発生している問題を解決するには、次のいずれかを実行します。
自分の中で定義された認証方式(複数可)に変更pg_hba.conf
したファイルtrust
、md5
またはpassword
あなたがそこに定義されているローカル接続記録のために(セキュリティとシンプルなニーズに応じて)。
pg_ident.conf
必要に応じて、オペレーティングシステムユーザーをPostgreSQLユーザーにマップし、対応するアクセス権限を付与するように更新します。
IDENT設定はそのままにして、アクセスを許可するオペレーティングシステムユーザーごとにデータベースにユーザーを作成します。ユーザーがすでにOSによって認証されてログインしている場合、PostgreSQLはそれ以上の認証を必要とせず、データベースでユーザーに割り当てられている特権(ロール)に基づいてそのユーザーにアクセスを許可します。これがデフォルトの設定です。
注:pg_hba.conf
およびの場所pg_ident.conf
はOSによって異なります。
/etc/postgresql/9.6/main/pg_hba.conf
です。
単純に-h localhost
ビットを追加するだけで動作しました
this_computer = 'http://localhost'
環境変数を設定できますPGHOST=localhost
:
$ psql -U db_user db_name
psql: FATAL: Peer authentication failed for user "db_user"
$ export PGHOST=localhost
$ psql -U db_user db_name
Password for user mfonline:
上記のいずれも
うまくいかない場合:
私はPostgresのインストールをかなりの数行いましたが、本日RedHat 6.5システム(Postgres 9.3のインストール)で大混乱しました。Aronが上に示した典型的なhba.conf構成が機能しませんでした。私のシステムはIPV6を使用しており、IPV4構成を無視していることがわかりました。行を追加します。
host all all ::1/128 password
ログインに成功しました。
上記のすべての答えのうち、何もうまくいきませんでした。データベース内のユーザーのパスワードを手動で変更する必要があり、それが突然機能しました。
psql -U postgres -d postgres -c "alter user produser with password 'produser';"
次の設定を使用しました。
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 password
# IPv6 local connections:
host all all ::1/128 password
次のコマンドで接続が成功しました:
psql -U produser -d dbname -h localhost -W
ポート113でリッスンするIDサーバーをインストールする必要があることがわかりました。
sudo apt-get install pidentd
sudo service postgresql restart
そして、アイデンティティが働いた。
pgAdminIIIでユーザー名とパスワードで接続できるが、接続できない場合 psql
、これらの2つのプログラムはデータベースへの接続が異なっている可能性があります。
[別のデータベースに接続している場合は、最初に同じデータベースに接続してみてください。下記参照。]
ホスト名を省略すると、psqlはUnixドメインソケットを介してローカルホスト上のサーバーに接続するか、TCP / IPを介してUnixドメインソケットを持たないマシン上のlocalhostに接続します。
のようなものを実行しておらずpsql ... -h host_name ...
、Ubuntuを実行している場合はpsql
、Unixドメインソケットを介して接続する必要があるため、PostgreSQLはおそらくpostgresのパスワード認証方法の1つを許可するように設定されていません。ユーザーの。
これを実行するには、次のコマンドを実行します。
sudo -u postgres psql
上記が機能する場合、postgresユーザーによるローカル接続にピア認証を使用するようにサーバーが構成されている可能性があります。つまり、OSにユーザー名を要求して、postgresであることを確認します。
ファイルの絶対パスは/etc/postgresql/9.3/main/pg_hba.confのような ものになります。たとえば、で表示できます。sudo cat /etc/postgresql/9.3/main/pg_hba.conf | more
psql
コマンドでホスト名を省略している場合、pg_hba.confファイルに次のエントリを追加すると、接続できるはずです。
# Connection type Database User IP addresses Method
local all postgres md5
[ pg_hba.confファイルのコメント行は#
。で始まります。]
コマンドにホスト名を含める場合は、psql
代わりに次のエントリを追加します。
# Connection type Database User IP addresses Method
host all postgres 127.0.0.1/32 md5
他のエントリがを介しpsql
た接続に一致する前に、エントリを置く必要があります。どこに置くべきか疑問がある場合は、最初のコメント化されていない行の前に置いてください。
PostgreSQLから:ドキュメント:9.3:pg_hba.confファイル [太字の強調]:
一致する接続タイプ、クライアントアドレス、要求されたデータベース、およびユーザー名を持つ最初のレコードは、認証を実行するために使用されます。「フォールスルー」または「バックアップ」はありません。1つのレコードが選択され、認証が失敗した場合、後続のレコードは考慮されません。一致するレコードがない場合、アクセスは拒否されます。
認証方式ではレコードが一致しないことに注意してください。したがって、pg_hba.confファイルに次のエントリが含まれている場合:
# Connection type Database User IP addresses Method
local all postgres peer
その後、次の方法で接続できなくなります。
psql -u postgres
これらのエントリの1つが前のエントリの上にあるpg_hba.confファイルにない場合:
# Connection type Database User IP addresses Method
local all postgres md5
local all postgres password # Unencrypted!
local all all md5
local all all password # Unencrypted!
問題はまだpg_hba.confファイルです。この行:このファイルは/ etc / postgres / varion / mainにあります
local all postgres peer
Should be
local all postgres md5
これらは、認証方法に関するPostgreSQLの公式ドキュメントによる両方のオプションの簡単な説明です。
ピア認証
ピア認証方法は、カーネルからクライアントのオペレーティングシステムのユーザー名を取得し、それを許可されたデータベースユーザー名として使用します(オプションのユーザー名マッピングを使用)。このメソッドは、ローカル接続でのみサポートされています。
パスワード認証
パスワードベースの認証方法は、md5とパスワードです。これらの方法は、パスワードが接続を介して送信される方法、つまりそれぞれMD5ハッシュとクリアテキストを除いて、同様に動作します。
パスワードの「スニッフィング」攻撃を心配している場合は、md5をお勧めします。可能であれば、プレーンなパスワードは常に避けてください。ただし、md5をdb_user_namespace機能とともに使用することはできません。接続がSSL暗号化によって保護されている場合、パスワードを安全に使用できます(SSLの使用に依存している場合は、SSL証明書認証の方が適している場合があります)。
このファイルを変更した後、PostgreSQLサーバーを再起動することを忘れないでください。Linuxを使用している場合は、sudo service postgresql restart.
fedora26およびpostgres9.6の場合
まず、ユーザーrootとしてログインし、次のコマンドでpsqlに入力します
$ su postgres
その後
$ psql
中psql
hba_file ==>手段の発見場所pg_hba.conf
postgres=# show hba_file ;
hba_file
--------------------------------------
/etc/postgresql/9.6/main/pg_hba.conf
(1 row)
pg_hba.conf
これへのファイル変更ユーザーアクセス
host all all 127.0.0.1/32 md5
bashシェルのMac OSX上のPostgreSQL 9.3での私のソリューションは、を使用sudo
してデータフォルダーに移動し、必要な行をpg_hba.conf
ファイルに追加して、すべてのユーザーが信頼され、ログインできるようにすることでした。これは私がやったことです:
# in bash_profile edit PGDATA environmental variable
open ~/.bash_profile
# append this line to bash_profile
export PGDATA="/Library/PostgreSQL/9.3/data"
# reload bash_profile
source ~/.bash_profile
# open pg_hba.conf in vim
sudo vi /Library/PostgreSQL/9.3/data/pg_hba.conf
# append these two lines to the end of the pg_hba.conf file
local all all trust
host all all 127.0.0.1/32 trust
# can now login as user in bash
psql -d <db_name> -U <user_name> -W
これらすべてを実行しても問題が解決しない場合は、そのユーザーの有効期限を確認します。
私はこのエラーを解決するのにより多くの時間を費やしてきました。
pg_hba.confでの認証設定の順序は、私が思うにあなたの場合に関連しています。デフォルトの構成ファイルには、通常のインストールで数行が含まれています。これらのデフォルトは、認証の失敗の原因となる認証試行の条件と一致する場合があります。.confファイルの最後に追加された構成に関係なく失敗します。
使用されている構成の行を確認するには、デフォルトのログファイルでメッセージを確認してください。あなたはこのようなものを見るかもしれません
LOG: could not connect to Ident server at address "127.0.0.1", port 113: Connection refused
FATAL: Ident authentication failed for user "acme"
DETAIL: Connection matched pg_hba.conf line 82: "host all all 127.0.0.1/32 ident"
このデフォルト行が拒否を引き起こしていることがわかりました。
host all all 127.0.0.1/32 ident
コメントアウトしてみてください。
これを回避する1つのハックは、pg_hba.confを編集することです
sudo vi /etc/postgresql/9.3/main/pg_hba.conf
一時的に
# Database administrative login by Unix domain socket
local all postgres trust
これで完了です。セキュリティのために、次に行きます
sudo -u postgres psql template1
ALTER USER postgres with encrypted password 'your_password';
次に戻って、pg_hba.confを
# Database administrative login by Unix domain socket
local all postgres md5
私はこれに従って同じ問題を抱えていました:Ubuntu 12.04でのRails開発用のPostgreSQLのセットアップ
私は他の答えを試しましたが、私がしなければならなかったすべては「config / database.yml」にありました
development:
adapter: postgresql
encoding: unicode
database: (appname)_development
pool: 5
username: (username you granted appname database priviledges to)
password:
CentOSで使用している場合は、上記のソリューションを作成した後にpostgresをリロードする必要がある場合があります。
systemctl restart postgresql-9.3.service
postgresql
systemctl status | grep postgres
これは私のために働きました:http : //tecadmin.net/fatal-ident-authentication-failed-for-user-postgres/#
local all postgres trust
local all myapp_usr trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
#host all all ::1/128 trust