psql:致命的:ユーザー「dev」のピア認証に失敗しました


198

新しいユーザーを作成したが、データベースにログインできない。
私はそれを次のようにします:

postgres@Aspire:/home/XXX$ createuser dev
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y

次に、データベースを作成します。

postgres@Aspire:/home/XXX$ createdb -O dev test_development

その後、私psql -U dev -W test_developmentはログインしようとしましたが、エラーが発生します:

psql: FATAL:  Peer authentication failed for user "dev"

問題を解決しようとしましたが、失敗しました。



今、あなたが追加する必要が上記の質問への回答を求めるプロンプトが表示される--interactive:コマンドにcreateuser --interactive joe
user3791372

回答:


310

試してください:

psql -U user_name  -h 127.0.0.1 -d db_name

どこ

  • -U データベースのユーザー名です
  • -h ローカルサーバーのホスト名/ IPであり、Unixドメインソケットを回避します
  • -d 接続するデータベース名です

これは、Unixドメインソケット接続ではなくPostgresqlによって「ネットワーク」接続として評価されるため、次のように「ローカル」接続として評価されませんpg_hba.conf

local   all             all                                     peer

15
必要な(バージョン9.4):psql -U user-name -h 127.0.0.1 -d db-name
Gregor

9
なんとorneryツール。マニュアルは述べているpsql [option...] [dbname [username]]あなたが思うだろうので、psql dbname usernameちょうど仕事だろう..
djeikyb

2
私のためにも働いた。また、これは構成ファイルを変更するよりもはるかに好ましい方法だと私は思います。特に、何をしているかについての手がかりがなく、SOの回答をたどって問題を解決するだけの場合はなおさらです。
borisano 2015年

1
これは私にとってはうまくいきました。おかげで、なぜそれが正しい解決策であったのかについて調査を行っています。それにもかかわらず、別のマシンの設定では、psql -U username -d databaseとしてログインします。だから私は受け入れられた解決策はケースに依存すると思います。
ラザロライジング

2
いい答えだ。私はpostgresとしてログインし\c glossary john FATAL: Peer authentication failed for user "john"\c glossary john localhost Password for user john: SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off) You are now connected to database "glossary" as user "john" on host "localhost" at port "5432".それが機能した後、データベース内から取得 していました。
見た目

215

デフォルトでpsqlpeer認証を使用してUNIXソケットを介して接続するため、現在のUNIXユーザーはと同じユーザー名を持つ必要があるため、接続に失敗しましたpsql。したがって、UNIXユーザーを作成してからdevログインするdevsudo -u dev psql test_development、データベースへのアクセスに使用するpsql必要があります(パスワードを要求しないでください)。

アドホッククエリのためにデータベースに接続するだけのように、UNIXユーザーを作成できない、または作成したくない場合は、psql --host=localhost --dbname=test_development --username=dev(@ meyersonの回答で指摘されているように)を使用してソケット接続を強制すると、直接の問題が解決します。

ただし、ピア方式ではなくUnixソケットでパスワード認証を強制する場合は、次のpg_hba.conf行を* 変更してみてください。

から

# TYPE DATABASE USER ADDRESS METHOD
local  all      all          peer

# TYPE DATABASE USER ADDRESS METHOD
local  all      all          md5
  • peerUNIXユーザーのID(信頼性)を信頼することを意味します。したがって、パスワードを要求しません。

  • md5つまり、常にパスワードを要求し、でハッシュした後にそれを検証しMD5ます。

もちろん、特定のデータベースまたはユーザーに対して、より具体的なルールを作成することもできpeerます。

pg_hba.confPostgreSQLが実行されているかどうかを変更した後、リロード(pg_ctl reload)または再起動(sudo service postgresql restart)して、構成を再度読み取るようにする必要があります。

*ファイルpg_hba.confはおそらく次の場所にあります/etc/postgresql/9.x/main/pg_hba.conf

編集: @ Chloe、@ JavierEH、@ Jonas Eicher、@ fccoelho、@ Joanis、@ Uphill_Whatからのコメント回答に組み込まれたコメント。


5
peer ANDを どのように許可しますmd5か?を設定するとmd5postgresユーザーでログインできなくなります!複数の行を追加し、メソッドをコンマで区切ってみましたが、機能しませんでした。OK mgoldwasserの答えを見つけましたが、うまくいきました。postgresメソッドを使用してユーザーに別の行を追加しましたpeer
クロエ

3
心配しないでください。特定のユーザー(たとえば、ユーザー名やpostgres)に対してピア認証を設定できます。特定のルールが一般的なルールを上書きするようです
JavierIEH 2014年

1
いくつかのディストリビューション上のファイルもここで見つけることがあります:/var/lib/pgsql/9.4/data/pg_hba.conf
ジョナスEicher

2
postgresqlを再起動せずにこれを行うことはできませんか?pg_userテーブルで認証方法を指定することはできませんか?
fccoelho

2
再起動する代わりにリロードできます。pg_hbaテーブルがリロードされます。私のために働いた。
Joanis、2015年

29

ピア認証とは、postgresがオペレーティングシステムにログイン名を要求し、これを認証に使用することを意味します。postgresでピア認証を使用してユーザー「dev」としてログインするには、オペレーティングシステムのユーザー「dev」でもある必要があります。

認証方法の詳細については、Postgresqlのドキュメントを参照してください。

ヒント:認証方法が機能しない場合は、サーバーをネットワークから切断し、「localhost」にメソッド「trust」を使用してください(メソッド「trust」が有効になっている間、サーバーがネットワーク経由で到達できないことを再確認してください)。



2
ステファンの答えは正しいです。編集をレビューすると表示されるリンクを、各認証方法が説明されているドキュメントに追加しました。
dsh 2013

25

指定する場合:

psql -U user

peer特に指定がpg_hba.confない限り、デフォルトで認証を使用するUNIXソケットを介して接続します。

以下を指定できます。

host    database             user             127.0.0.1/32       md5
host    database             user             ::1/128            md5

指定されたdatabaseおよびのループバックインターフェイス(IPv4とIPv6の両方)でTCP / IP接続を取得しますuser

変更後、postgresを再起動するか、設定をリロードする必要があります。最新のRHEL / Debianベースのディストリビューションで機能するはずの再起動:

service postgresql restart

リロードは次のように機能するはずです。

pg_ctl reload

ただし、コマンドはPATH構成によって異なる場合があります。postgresのインストール方法によっては、絶対パスを指定する必要がある場合があります。

それからあなたは使うことができます:

psql -h localhost -U user -d database

TCP / IPでuser指定されたものでログインしdatabaseます。 md5は暗号化されたパスワードを表しますが、password認証時にプレーンテキストのパスワードを指定することもできます。これらの2つのオプションは、データベースサーバーがローカルでのみアクセス可能で、ネットワークにアクセスできない限り、重要な問題ではありません。

重要な注意:pg_hba.conf事項の 定義順序-ルールはiptablesのように上から下に読み込まれるため、提案されたルールをルールの上に追加することをお勧めします。

host    all             all             127.0.0.1/32            ident

重要なメモについて:-順序は重要です+1
hawkeye

23

@flaviodesousaの答えは機能しますが、すべてのユーザー(全員)がパスワードを入力することも必須になります。

他のすべてのユーザーのピア認証を維持することは理にかなっていますが、サービスユーザーには例外があります。その場合、次のような行をpg_hba.confに追加します。

local   all             some_batch_user                         md5

コメント付きのヘッダー行のすぐ下に次の行を追加することをお勧めします。

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             some_batch_user                         md5

PostgreSQLを再起動する必要があります

sudo service postgresql restart

9.3を使用している場合、pg_hba.confはおそらく次のようになります。

/etc/postgresql/9.3/main/pg_hba.conf


12

これは私がそれに遭遇したときに私にとってうまくいきます:

sudo -u username psql

システム上とpostgresでまったく新しいユーザーを作成する場合にのみ機能します-hsmingは、新しく作成されたpostgresユーザーでpostgresに接続したいだけdevです。
ケネス

8

最も簡単なソリューション:

CREATE USER dev WITH PASSWORD 'dev';
CREATE DATABASE test_development;
GRANT ALL PRIVILEGES ON DATABASE test_development to dev;
ALTER ROLE dev CREATEROLE CREATEDB;

6

私は単に追加する必要がありました -h localhost


私の問題はRaspberryでpostgresを使用することでした。^^^私のために働いた!! ありがとうございました!
tidydee

2

私の場合、別のポートを使用していました。デフォルトは5432です。私は5433を使用していました。これは私にとってはうまくいきました:

$ psql -f update_table.sql -d db_name -U db_user_name -h 127.0.0.1 -p 5433

これは、postgresが複数インストールされている場合に自動的に発生します。
Galigator、2017年

1

これを見ている将来の人々のpostgresため/usr/lib/postgresql/10/binに、私のUbuntuサーバーにあります。

.bashrcファイルのPATHに追加し、最後にこの行を追加しました

PATH=$PATH:/usr/lib/postgresql/10/bin

その後、コマンドラインで

$> source ./.bashrc

bash環境を更新しました。これでpostgres -D /wherever、どのディレクトリからでも使用できます


1

pg_dump -h localhost -U postgres -F c -b -v -f mydb.backup mydb


この答えはどんな質問ですか?なぜ-U postgres重要なのでしょうか?とにかく、それらすべてのダッシュ文字は何ですか?
greybeard

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.