PostgreSQL:ユーザーのパスワードの変更が機能しない


9
  • マシンにインストールPostgreSQLEC2、ユーザーのパスワードを変更したいpostgres
  • 私がやります
$ sudo -u postgres psql
psql (9.1.5)
Type "help" for help.

postgres=# ALTER USER postgres WITH PASSWORD 'newpasswd';
ALTER ROLE
  • 次に、シェルを終了し、新しいパスワードでログインしようとします
$ psql -U postgres -W
Password for user postgres: 
psql: FATAL:  Peer authentication failed for user "postgres"

私のPostgreSQLバージョンは

$ psql --version
psql (PostgreSQL) 9.1.5
contains support for command-line editing

私が間違っていることは何ですか?

ありがとうございました

更新 私は変更を加えました、pg_hba.confそしてこれは今それがどのように見えるかです

# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
#local   all             all                                     peer
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

その後、私は再起動しました postgres

$ sudo /etc/init.d/postgresql restart
 * Restarting PostgreSQL 9.1 database server                                                                                                                                               [ OK ] 

もう一度ログインしようとしたが失敗した

$ psql -U postgres -W
Password for user postgres: 
psql: FATAL:  Peer authentication failed for user "postgres"

おそらく古いパスワードはまだ〜/ .pgpassファイルに保存されています。

いや、そこにパスワードのプロンプトがあります。pg_hba.confパスワード認証を受け付けないように設定されていると思います。

@willglynn、更新を確認してください。変更を加えた後も失敗しますpg_hba.conf
Daydreamer

回答:


9

willglynnが言ったように、おそらくpg_hba.confファイルです。

次の行がある場合:

local   all    all     peer

次に、次のように変更します。

local   all    all     md5

次に、新しいパスワードでログインできるようにします(正しく入力した場合):)


こんにちは、@ Davidさん、あなたの言ったように試してみましたが、まだ失敗します。私のアップデートを確認してください。ありがとう
Daydreamer

ユーザーpeerからのローカル(UNIXドメインソケット)接続に適用される行がまだありpostgresます。遠端がOS postgresユーザーとして実行されていない限り、これは失敗します。理解を深めるには、pg_hba.confのドキュメントを参照してください。

私は実行することができましたがdjango manage.py syncdb、私はpg_hba.confあなたが言及したドキュメンテーションについて引き続き読んでいきます。あなたの助けに感謝します
Daydreamer

追加する必要がありました-h localhost
マイク

5

pg_hba.confファイルを変更するだけでなく、

local   all    all     peer

local   all    all     md5

受け入れられた回答によれば、OPが行っていたのと同じことを行った後でログインできる唯一の方法は-h、ログインを試みるときにフラグを渡すことでした。

$ psql -U postgres -h localhost

うまくいけば、これは将来誰かを助けるでしょう。それは私を狂わせていました!


0

あなたはこれを持っています...

# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
#local   all             all                                     peer
local   all             all                                     md5

これで変更:

# Database administrative login by Unix domain socket
local   all             postgres                                md5

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
#local   all             all                                     md5

そしてpostgresqlサービスを再起動します

sudo /etc/init.d/posgresql restart

この仕事は私にとって


変更するpg_hba.conf場合、Postgresを再起動する必要はありません。設定の再読み込みで十分です。例えばpg_ctl ... reloadまたはselect pg_reload_conf()
a_horse_with_no_name

ただリロードしてください...知りませんでした...ありがとう
イスラエルLロサス

-1

パスワードを何度も変更し、ここで述べたすべてのことを試みた後に頭がおかしくなっている人々のために、ユーザーの有効期限を確認することを忘れないでください。あなたはそれをpsql 9.xのように「無期限」に設定できます:

ALTER ROLE <username> VALID UNTIL 'infinity';

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