216

新しいユーザーを作成すると、データベースにログインできません。
私はこのようにします:

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"

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

4

12 に答える 12

231

デフォルトでは、 は認証psqlを使用して UNIX ソケット経由で接続するため、接続に失敗しましたpeer。これには、現在の UNIX ユーザーが と同じユーザー名を持っている必要がありますpsql。そのため、UNIX ユーザーを作成してからdevログインするか、データベースにアクセスするためにdev使用する必要があります (パスワードを要求する必要はありません)。sudo -u dev psql test_developmentpsql

アドホッククエリのためにデータベースに接続したいだけの場合のように、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 ユーザーの身元 (真正性) を信頼することを意味します。したがって、パスワードを要求することはありません。

  • md5は、常にパスワードを要求し、 でハッシュした後に検証することを意味しますMD5

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

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

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

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

于 2014-02-19T18:56:59.430 に答える
30

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

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

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

于 2013-07-03T09:10:06.140 に答える
25

指定する場合:

psql -U user

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

以下を指定できます。

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で指定されたものでログインします。は暗号化されたパスワードを表しますが、認証中にプレーン テキストのパスワードを指定することもできます。これら 2 つのオプションは、データベース サーバーがローカルでのみアクセス可能であり、ネットワーク アクセスがない限り、大きな問題にはなりません。databasemd5password

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

host    all             all             127.0.0.1/32            ident
于 2015-05-05T12:26:50.407 に答える
24

@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

于 2014-05-21T15:03:41.110 に答える
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;
于 2016-06-09T06:41:38.327 に答える
2

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

$ psql -f update_table.sql -d db_name -U db_user_name -h 127.0.0.1 -p 5433
于 2017-02-21T06:20:30.000 に答える
1

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

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

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

次にコマンドラインで

$> source ./.bashrc

bash 環境をリフレッシュしました。postgres -D /whereverこれで、任意のディレクトリから使用できます

于 2019-03-15T01:59:38.763 に答える