psql:致命的:ユーザー「postgres」のID認証に失敗しました


372

Ubuntu KarmicボックスにPostgreSQLとpgAdminIIIをインストールしました。

pgAdminIIIを正常に使用できます(つまり、接続/ログオン)。ただし、コマンドラインで同じユーザー名/ pwdを使用して(psqlを使用して)サーバーにログインしようとすると、エラーが発生します。

psql: FATAL:  Ident authentication failed for user "postgres"

この問題を解決する方法はありますか?


このstackoverflowの投稿は私にとって
うまくいき

回答:


194

pg_hba.confで適切な設定を行いましたか?

方法については、https://help.ubuntu.com/stable/serverguide/postgresql.htmlを参照してください


36
これは私にはうまくいきません。私はそれに何時間も費やしました!ターミナルでpsqlコマンドを実行するだけです。これを行うには、ファイルをどのように見せるために何が必要ですか?
Sean

54
@SeanA「sudo -u postgres psql」のようなものが必要
JLarky

8
「;」を忘れないでください。psqlのすべてのステートメントの最後。ばかげているように聞こえますが、それは彼に起こります。
omrsin

42
@Robert:「postgresqlは最もユーザーにとって使いにくいデータベースです」?いつかOracleを試してみて、いくつかの見方を
理解してください

5
railsを使用している場合は、pg_hba.confを設定し、「ident」を「password」に変更する必要がありました。信頼に変更することはできませんでした。
阿部ペトリロ2013

412

次の手順は、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コネクションを使用して接続したいことをクライアントに。\qctrl+d-h localhostpsql

$ psql -U postgres -h localhost

13
設定したPGHOST=localhost場合、-h毎回オプションを指定する必要はありません。これは、pg_*などの他のコマンドでも機能しますpg_dump
サミール

1
それはここに記載されています:help.ubuntu.com/12.04/serverguide/postgresql.html
Hendra Uzia

2
これは、DebianでPostgreSQLを使用してMediawikiをインストールできるようにするために必要でした。
mivk 2013年

2年後、Macでもこれを行う必要があります。
Manav、2015年

1
セキュリティ上の問題があるので、悪い、こちらを参照してください。serverfault.com/questions/110154/...
Erdinc Ayの

161

ファイル/etc/postgresql/8.4/main/pg_hba.confを編集し、自分のコンピュータでパスワードを要求するかどうかに応じて、またはで置き換えるidentpeermd5またはtrustで置き換えます。次に、構成ファイルを次のように再ロードします。

/etc/init.d/postgresql reload

4
1つのコマンドでpostgresqlを再起動します。/etc/init.d/postgresqlrestart
Tyler Long

14
リロードが必要なのに再起動が必要なのはなぜですか?
フランクハイケンズ

この場合: "/etc/init.d/postgresql-8.4 reload"
shaytac

1
これはここで私のために働いた。ピアからmd5への変更で十分でした。
Jonatas CD、

1
OK、私は、PostgreSQLのnoobだけど、私はそれだけで報告しなければならrestartない、私のために働いreloadへの変更後--- /etc/postgresql/9.5/main/pg_hba.conf(変更peertrust)。
Mike O'Connor

91

クライアント認証に失敗しているため、このエラーが発生しています。エラーメッセージに基づいて、おそらくデフォルトの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を参照してください。

したがって、発生している問題を解決するには、次のいずれかを実行します。

  1. 自分の中で定義された認証方式(複数可)に変更pg_hba.conf したファイルtrustmd5またはpasswordあなたがそこに定義されているローカル接続記録のために(セキュリティとシンプルなニーズに応じて)。

  2. pg_ident.conf必要に応じて、オペレーティングシステムユーザーをPostgreSQLユーザーにマップし、対応するアクセス権限を付与するように更新します。

  3. IDENT設定はそのままにして、アクセスを許可するオペレーティングシステムユーザーごとにデータベースにユーザーを作成します。ユーザーがすでにOSによって認証されてログインしている場合、PostgreSQLはそれ以上の認証を必要とせず、データベースでユーザーに割り当てられている特権(ロール)に基づいてそのユーザーにアクセスを許可します。これがデフォルトの設定です。

注:pg_hba.confおよびの場所pg_ident.confはOSによって異なります。


4
私にとっては、これが最良の答えです。これらのオプションがすべてわかっている場合は、設定を簡単に調整できます。特にDevマシンを使用している場合は、すべてのエントリに「ident」を設定するだけで、時間の浪費を回避できます。ありがとう
venkatareddy

1
これも私にとって役に立ちました。私の場合、pg_hba.confファイルがピアに設定されているので、パスワードに変更しました。通常のインストールから、postgresユーザーのパスワードを設定する必要があったことに注意してください。sudosu-postgres psql、\ passwordはパスワードを設定します。次に、ユーザー名postgresと設定したパスワードを使用して、pdgadmin3からデフォルト接続を起動します。
エデンコルビン2017年

1
そして、そのファイルはどこにありますか?確かに、バージョン間で一貫性がないように見えるため、リストを作成する必要がある場合があります。'/'でfindを実行するだけだと思います。
JosephK 2017

1
Ubuntu-16.04では/etc/postgresql/9.6/main/pg_hba.confです。
Mike O'Connor

1
psqlを初めて使う人にとって、これは大きな助けとなり、さまざまな認証方法に対応するため、受け入れられる答えになるはずです
Vyrnach

45

単純に-h localhostビットを追加するだけで動作しました


これがなぜそれを修正するのか知っていますか?
Michael Pell

postgresqlのデフォルトは適切に設定されていません。彼らは今までにそれを修正したかもしれません、私は知りません。明らかに、デフォルトのURLはする必要がありますthis_computer = 'http://localhost'
boulder_ruby

15

環境変数を設定できます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:

15

上記のいずれも

うまくいかない場合: 私はPostgresのインストールをかなりの数行いましたが、本日RedHat 6.5システム(Postgres 9.3のインストール)で大混乱しました。Aronが上に示した典型的なhba.conf構成が機能しませんでした。私のシステムはIPV6を使用しており、IPV4構成を無視していることがわかりました。行を追加します。

host    all             all             ::1/128                 password

ログインに成功しました。


イーサン、ありがとう。Fedora 20を実行していますが、OPと同じ問題に直面しています。IPV4とIPV6をパスワードに変更した後。接続は成功しました。
Ibn Saeed 2014年

1
いいえ、どいたしまして。プログラミングやシステムの問題に遭遇したとき、私は他の投稿から何度も恩恵を受けてきました。少しお返しできてよかったです。
イーサンブラウン

1
これはFedora 32で私の命を救った!
ラミ

12

上記のすべての答えのうち、何もうまくいきませんでした。データベース内のユーザーのパスワードを手動で変更する必要があり、それが突然機能しました。

psql -U postgres -d postgres -c "alter user produser with password 'produser';"

次の設定を使用しました。

pg_hba.conf

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 

これに続いて、私をここで助けました、ジョセフ。特に、最後の接続コマンドは、テストに役立ちます。また、誰かが不思議に思っている場合に備えて、Postgresqlサービスの再起動を追加します(ただし、それが暗示されていることはわかります)。どうぞよろしくお願いします!
ハーリン

10

ポート113でリッスンするIDサーバーをインストールする必要があることがわかりました。

sudo apt-get install pidentd
sudo service postgresql restart

そして、アイデンティティが働いた。


10

うーん...

pgAdminIIIでユーザー名とパスワードで接続できるが、接続できない場合 psql、これらの2つのプログラムはデータベースへの接続が異なっている可能性があります。

[別のデータベースに接続している場合は、最初に同じデータベースに接続してみてください。下記参照。]

PostgreSQLから:ドキュメント:9.3:psql

ホスト名を省略すると、psqlはUnixドメインソケットを介してローカルホスト上のサーバーに接続するか、TCP / IPを介してUnixドメインソケットを持たないマシン上のlocalhostに接続します。

のようなものを実行しておらずpsql ... -h host_name ...、Ubuntuを実行している場合はpsql、Unixドメインソケットを介して接続する必要があるため、PostgreSQLはおそらくpostgresのパスワード認証方法の1つを許可するように設定されていません。ユーザーの。

これを実行するには、次のコマンドを実行します。

sudo -u postgres psql

上記が機能する場合、postgresユーザーによるローカル接続にピア認証を使用するようにサーバーが構成されている可能性があります。つまり、OSにユーザー名を要求して、postgresであることを確認します

だからそれはおそらくあなたのpg_hba.confですファイルです

ファイルの絶対パスは/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た接続に一致する前に、エントリを置く必要があります。どこに置くべきか疑問がある場合は、最初のコメント化されていない行の前に置いてください。

もっと詳しく pg_hba.confの

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!

2
ゲームには遅れましたが、真剣に、理解できるように適切に説明することに力を入れてくれてありがとう!
Jeffrey 'jf' Lim

10

私の場合、ここでの解決策:(関係者向け)postgresにログインします。

sudo -i -u postgres
psql
ALTER USER postgres WITH PASSWORD 'postgres'; # type your password here

よろしく


7

問題はまだ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.


7

fedora26およびpostgres9.6の場合

まず、ユーザーrootとしてログインし、次のコマンドでpsqlに入力します

$ su postgres  

その後

$ psql

psqlhba_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

6

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

1
これは開発サーバーでは問題ありませんが、これらの設定でデータベースに接続するためのパスワードが不要になるため、運用環境ではお勧めしません。
マイケル


4

私はこのエラーを解決するのにより多くの時間を費やしてきました。

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

コメントアウトしてみてください。


3

これを回避する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

1

同様の問題があり、IP6アドレスの場合でもすべてのidentメソッドを削除すると、pg_hba.confでそれを修正しました(マシンにはIP4しかありません)。

host all all 127.0.0.1/32 password
host all all ::1/128 password
#for pgAdmin running at local network
host all all 192.168.0.0/24 md5

0

私はこれに従って同じ問題を抱えていました: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:

0

CentOSで使用している場合は、上記のソリューションを作成した後にpostgresをリロードする必要がある場合があります。

systemctl restart postgresql-9.3.service

それは今だけですpostgresql
Neil Chowdhury 2018

@NeilChowdhury postgresqlサービスは、少なくともLinuxシステムでは、まだサービス名にバージョンがあります。このコマンドを実行して確認systemctl status | grep postgres
Ikrom


0

Windowsの場合、pb_gba.confを編集しない場合、つまりメソッドをMD5(デフォルト)のままにして、PGadminのクエリツールでこのクエリ実行して、新しいユーザーを作成します。PGadmin

CREATE USER admin WITH PASSWORD 'secret'

その後、cmd

psql "dbname=Main_db host=127.0.0.1 user=admin password=secret port=5432

ここで、dbnameはpostgresqlでのdbです。

ここに画像の説明を入力してください


-3

これは私のために働きました: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

1
これにより、localhostの誰でも任意のユーザーとしてログインできます。この動作はリンクのどこにも記載されていません。そして、はい、debian情報ページには同じものが含まれています。
rkapl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.