私はエラーを得ています:
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
を実行しても表示されません。
私が間違っているところで何か考え?
問題はまだあなたの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
Postgresqlをインストールした後、私は以下のステップを行いました。
pg_hba.conf
を開き、それが/etc/postgresql/9.x/main
になるようにして、次の行を変更します。ローカル全postgresピア
に
local all postgres trust
Sudo service postgresql restart
psql -U postgres
ALTER USER postgres with password 'your-pass';
pg_hba.conf
をlocal all postgres trust
に
ローカルすべてpostgres md5
Postgresqlサーバーを再起動したら、自分のパスワードでアクセスできます。
認証方法の詳細:
信頼 - サーバーに接続できる人は誰でもデータベースにアクセスする権限があります。
peer - クライアントのオペレーティングシステムのユーザー名をデータベースユーザー名として使用してアクセスします。
md5 - パスワードベース認証
さらなる参照のために ここでチェックしなさい
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 …
root@www0:~# echo "deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" >> /etc/apt/sources.list
root@www0:~# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
root@www0:~# apt-get update
root@www0:~# apt-get install postgresql-9.4
root@www0:~# su - postgres
postgres@www0:~$ 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
postgres@www0:~$ createdb -O someuser database
postgres@www0:~$ psql -U someuser -h 127.0.0.1 database
楽しい!
これは私のために働きました!
Sudo -u postgres psql
私の場合:
$> Sudo nano /etc/postgresql/9.3/main/pg_hba.conf
これは次のように変更されます。
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
それから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の再起動後にうまく動かない場合は、ターミナルを閉じてからもう一度開いてください。
私は同じ問題を抱えていました。
Depaからの解決策は絶対に正しいです。
PostgreSQLを使用するようにユーザが設定されていることを確認してください。
ファイルを確認してください。
$ ls /etc/postgresql/9.1/main/pg_hba.conf -l
このファイルの許可はあなたがあなたのpsqlを登録したユーザーに与えられるべきです。
さらに。あなたが今まで良いなら..
@ depaの指示に従って更新してください。
すなわち.
$ Sudo nano /etc/postgresql/9.1/main/pg_hba.conf
そして変更を加えます。
デフォルトの設定を保持したいが、ある特定のユーザ/ 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
クローンサーバ上のデータディレクトリを移動していて、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=#
接続にはHost=localhost
を使用してください。
PGconn *conn = PQconnectdb(
"Host=localhost user=postgres dbname=postgres password=123"
);
上記の編集は私がやった後postgresサーバーを再起動する必要があることを私が理解した後、私にはうまくいきました。 Ubuntuの場合:
Sudo /etc/init.d/postgresql restart
Pg_hba.conf(/etc/postgresql/9.1/main/pg_hba.conf | 85行目)でMETHOD peer から trust に変更することで問題は解決します。 md5を追加するとパスワードが要求されるので、パスワードを使用しないようにする必要がある場合は、 md5 の代わりに trust を使用します。
下記のコマンドは私のために働く:
psql -d myDb -U username -W
METHODを信頼に設定するだけです。
#TYPE DATABASE USER ADDRESS METHOD
local all all trust
そしてpostgresサーバーをリロードしてください。
# service postgresql-9.5 reload
pg_hba.confの変更はRESTART postgresサーバを必要としません。ただリロードしてください。
他の答えの多くはさまざまな設定ファイルの設定に関するもので、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のパス設定はすべて正しいはずです。
Cloud 9でこのファイルを見つけようとしているのなら、
Sudo vim /var/lib/pgsql9/data/pg_hba.conf
I
を押して編集/挿入し、ESC
を3回押して:wq
とタイプするとファイルが保存されて終了します
Sudo psql --Host=localhost --dbname=database-name --username=postgres
これで私の問題は解決しました
私の問題は私がサーバーを入力しなかったことでした。私はそれがプレースホルダーのためにデフォルトであると思いました、しかし、私がlocalhostをタイプするとき、それは働きました。
あなたがRailsでこの問題に直面していて、あなたがすでに正しいユーザー名とパスワードでそのユーザー名を作成していることを知っているなら、あなたはちょうどあなたのdatabase.ymlファイルの最後に以下を置く必要があります。
Host: localhost
全体的なファイルは以下のようになります
development:
adapter: postgresql
encoding: unicode
database: myapp_development
pool: 5
username: root
password: admin
Host: localhost
あなたはpg_hba.conf
ファイルに触る必要は全くありません。ハッピーコーディング