web-dev-qa-db-ja.com

エラーを取得する:pgsqlをrailsで動かそうとしたときに、ユーザー "postgres"のピア認証が失敗しました

私はエラーを得ています:

FATAL: Peer authentication failed for user "postgres"

私がpostgresをRailsで動かそうとした時。

これが、my pg_hba.conf 、my database.yml 、および フルトレースのダンプ です。

Pg_hbaで認証をmd5に変更してさまざまなことを試しましたが、どれもうまくいかないようです。

Rails 3.2、FATALのように新しいユーザーとデータベースを作成しようとしました(PG :: Error)

しかし、それらはpgadminには表示されず、Sudo -u postgres psql -lを実行しても表示されません。

私が間違っているところで何か考え?

589
orderof1

問題はまだあなたのpg_hba.confファイル(/etc/postgresql/9.1/main/pg_hba.conf *)です。この行

local   all             postgres                                peer

する必要があります

local   all             postgres                                md5

*このファイルが見つからない場合は、locate pg_hba.confを実行するとファイルの場所が表示されます。

このファイルを変更した後は、PostgreSQLサーバを再起動することを忘れないでください。あなたがLinuxを使っているなら、それはSudo service postgresql restartになるでしょう。

認証方法に関する 公式PostgreSQLドキュメント によると、これらは両方のオプションの簡単な説明です。

ピア認証

ピア認証方法は、カーネルからクライアントのオペレーティングシステムのユーザー名を取得し、それを許可されたデータベースユーザー名として使用することで機能します(オプションのユーザー名マッピングを使用)。この方法はローカル接続でのみサポートされています。

パスワード認証

パスワードベースの認証方法は、md5とpasswordです。これらの方法は、パスワードが接続を介して送信される方法、つまりそれぞれMD5ハッシュとクリアテキストを除いて、同様に機能します。

あなたがパスワードの "スニッフィング"攻撃を心配しているなら、md5が優先されます。通常のパスワードは可能な限り避けるべきです。ただし、md5をdb_user_namespace機能と一緒に使用することはできません。接続がSSL暗号化によって保護されている場合は、パスワードを安全に使用できます(ただし、SSL証明書による認証は、SSLの使用に依存している場合に適しています)。

pg_hba.confのサンプルの場所

/etc/postgresql/9.1/main/pg_hba.conf

847
depa

Postgresqlをインストールした後、私は以下のステップを行いました。

  1. ubuntu用のファイルpg_hba.confを開き、それが/etc/postgresql/9.x/mainになるようにして、次の行を変更します。
ローカル全postgresピア

local all postgres trust
  1. サーバーを再起動します
Sudo service postgresql restart
  1. Psqlにログインしてパスワードを設定してください

psql -U postgres

ALTER USER postgres with password 'your-pass';
  1. 最後にpg_hba.conf
local all postgres trust

ローカルすべてpostgres md5

Postgresqlサーバーを再起動したら、自分のパスワードでアクセスできます。

認証方法の詳細:

信頼 - サーバーに接続できる人は誰でもデータベースにアクセスする権限があります。

peer - クライアントのオペレーティングシステムのユーザー名をデータベースユーザー名として使用してアクセスします。

md5 - パスワードベース認証

さらなる参照のために ここでチェックしなさい

280
Arivarasan L

Localhost(127.0.0.1)を介して接続している場合は、この問題は発生しません。私はpg_hba.confをあまり使いたくないでしょうが、代わりにあなたの接続文字列を調整します:

psql -U someuser -h 127.0.0.1 database

someuserはあなたが接続しているあなたのユーザーであり、databaseはあなたのユーザーが接続する許可を持っているデータベースです。

これが私がDebianでpostgresを設定するためにすることです:

http://www.postgresql.org/download/linux/debian/  (Wheezy 7.x)

as root …

    [email protected]:~# echo "deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" >> /etc/apt/sources.list

    [email protected]:~# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -

    [email protected]:~# apt-get update

    [email protected]:~# apt-get install postgresql-9.4        

    [email protected]:~# su - postgres 

    [email protected]:~$ createuser --interactive -P someuser
    Enter password for new role:
    Enter it again:
    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) n

    [email protected]:~$ createdb -O someuser database

    [email protected]:~$ psql -U someuser -h 127.0.0.1 database

楽しい!

160
StylusEater

これは私のために働きました!

Sudo -u postgres psql
26
iamuser2
  1. /etc/postgresql/9.x/main/ にアクセスして pg_hba.conf fileを開きます。

私の場合:

$>  Sudo nano /etc/postgresql/9.3/main/pg_hba.conf
  1. peer md5 に置き換えます。

これは次のように変更されます。

Unixドメインソケットローカルのすべてのpostgresピアによるデータベース管理ログイン

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
Host    all             all             127.0.0.1/32            md5

この:

Unixドメインソケットローカルによるデータベース管理者ログインall postgres md5

# TYPE  DATABASE        USER            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
  1. それからpg serverを再起動します。

    $> Sudoサービスpostgresql再起動

以下はpostgresと接続するために使われるMETHODSのリストです:

# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi",
# "krb5", "ident", "peer", "pam", "ldap", "radius" or "cert".  Note that
# "password" sends passwords in clear text; "md5" is preferred since
# it sends encrypted passwords.

注: 作成していない場合は、まだpostgresユーザーになっています。それを作成すれば、そのユーザの資格情報を使ってpostgresサーバにアクセスできるようになります。

ヒント: postgresの再起動後にうまく動かない場合は、ターミナルを閉じてからもう一度開いてください。

15

問題がある場合は、あなたのpg_hba.confを探す必要があります。コマンドは以下のとおりです。

find / -name 'pg_hba.conf' 2>/dev/null

その後、設定ファイルを変更します。

Postgresql 9.3

Postgresql 9.3

Postgresql 9.4

Postgresql 9.3

次のステップは、dbインスタンスを再起動することです。

service postgresql-9.3 restart

問題がある場合は、パスワードをもう一度設定する必要があります。

ALTER USER db_user with password 'db_password';

14
d.danailov

私は同じ問題を抱えていました。

Depaからの解決策は絶対に正しいです。

PostgreSQLを使用するようにユーザが設定されていることを確認してください。

ファイルを確認してください。

$ ls /etc/postgresql/9.1/main/pg_hba.conf -l

このファイルの許可はあなたがあなたのpsqlを登録したユーザーに与えられるべきです。

さらに。あなたが今まで良いなら..

@ depaの指示に従って更新してください。

すなわち.

$ Sudo nano /etc/postgresql/9.1/main/pg_hba.conf

そして変更を加えます。

10
nirvanastack

デフォルトの設定を保持したいが、ある特定のユーザ/ db接続に対してソケット接続を使用したmd5認証が必要な場合は、「local all/all」行の前に「local」行を追加します。

# TYPE  DATABASE     USER         ADDRESS             METHOD

# "local" is for Unix domain socket connections only
local   username     dbname                           md5  # <-- this line
local   all          all                              peer
# IPv4 local connections:
Host    all          all          127.0.0.1/32        ident
# IPv6 local connections:
Host    all          all          ::1/128             ident
7
Åsmund

クローンサーバ上のデータディレクトリを移動していて、postgresとしてログインするのに問題がありました。このようにpostgresのパスワードを再設定するとうまくいきました。

root# su postgres postgres$ psql -U postgres psql (9.3.6) Type "help" for help. postgres=#\password Enter new password: Enter it again: postgres=#

6
Luca Marletta

接続にはHost=localhostを使用してください。

PGconn *conn = PQconnectdb(
    "Host=localhost user=postgres dbname=postgres password=123"
);
6
Manisha Vasani

上記の編集は私がやった後postgresサーバーを再起動する必要があることを私が理解した後、私にはうまくいきました。 Ubuntuの場合:

Sudo /etc/init.d/postgresql restart
6
sibosop

Pg_hba.conf(/etc/postgresql/9.1/main/pg_hba.conf | 85行目)でMETHOD peer から trust に変更することで問題は解決します。 md5を追加するとパスワードが要求されるので、パスワードを使用しないようにする必要がある場合は、 md5 の代わりに trust を使用します。

5

下記のコマンドは私のために働く:

psql -d myDb -U username -W
4
Mazen Ora

METHODを信頼に設定するだけです。

#TYPE  DATABASE        USER            ADDRESS                 METHOD
local    all             all                                     trust

そしてpostgresサーバーをリロードしてください。

# service postgresql-9.5 reload

pg_hba.confの変更はRESTART postgresサーバを必要としません。ただリロードしてください。

3

他の答えの多くはさまざまな設定ファイルの設定に関するもので、pg_hba.confに関するものも適用され、100%正しいものです。ただし、 正しい設定ファイルを変更していることを確認してください

他の人が述べたように、設定ファイルの場所はメイン設定ファイル内のさまざまな設定で上書きすることができます。また、-Dオプションでコマンドラインでメイン設定ファイルへのパスを指定することもできます。

設定ファイルが読み込まれている場所を表示するには、psqlセッション中に次のコマンドを使用します(psqlを起動できると仮定して)。これは単なるトラブルシューティングの手順で、一部の人に役立ちます。

select * from pg_settings where setting~'pgsql';  

また、あなたのpostgresユーザのためのホームディレクトリがあなたがそれが期待するところであることを確認するべきです。これは、あなたのプロンプトがあなたのホームディレクトリの実際のパスの代わりに '~'を表示して、それがそれほど明白でないという事実のためにこれを見落とすのが非常に簡単であるのでこれを言います。多くのインストールはデフォルトでpostgresユーザのホームディレクトリを/var/lib/pgsqlにします。

想定どおりに設定されていない場合は、postgresqlサービスを停止し、rootとしてログインしている間に次のコマンドを使用します。 postgresユーザーが他のセッションにログインしていないことも確認してください。

usermod -d /path/pgsql postgres

最後に、echo $PGDATAと入力してPGDATA変数が正しく設定されていることを確認します。

/path/pgsql/data

それが設定されていないか、あなたが期待しているものとは違うものを示しているなら、.profileや.bash.rcのようなあなたの起動ファイルやRCファイルを調べてください。あなたのマシンの正しい起動スクリプトが決まったら、以下を挿入することができます。

export PGDATA=/path/pgsql/data

私のシステムでは、これを/etc/profile.d/profile.local.shに配置したので、すべてのユーザーがアクセスできるようになりました。

これでデータベースを通常通りに初期化でき、psqlのパス設定はすべて正しいはずです。

3
Bill

Cloud 9でこのファイルを見つけようとしているのなら、

Sudo vim /var/lib/pgsql9/data/pg_hba.conf

Iを押して編集/挿入し、ESCを3回押して:wqとタイプするとファイルが保存されて終了します

2
Marshall
Sudo psql --Host=localhost --dbname=database-name --username=postgres

これで私の問題は解決しました

2
Gihan Gamage

私の問題は私がサーバーを入力しなかったことでした。私はそれがプレースホルダーのためにデフォルトであると思いました、しかし、私がlocalhostをタイプするとき、それは働きました。

2
Epsilon47

あなたがRailsでこの問題に直面していて、あなたがすでに正しいユーザー名とパスワードでそのユーザー名を作成していることを知っているなら、あなたはちょうどあなたのdatabase.ymlファイルの最後に以下を置く必要があります。

Host: localhost

全体的なファイルは以下のようになります

development:
  adapter: postgresql
  encoding: unicode
  database: myapp_development
  pool: 5
  username: root
  password: admin
  Host: localhost

あなたはpg_hba.confファイルに触る必要は全くありません。ハッピーコーディング

1
ImranNaqvi