web-dev-qa-db-ja.com

Django setting:psycopg2.OperationalError:FATAL:ユーザー "indivo"のピア認証に失敗しました

Django POSTGRESQLでのプロジェクト設定で問題が発生しています。

これは私のsetting.pyデータベース設定です

DATABASES = {
    'default':{
        'ENGINE':'Django.db.backends.postgresql_psycopg2', # '.postgresql_psycopg2', '.mysql', or '.Oracle'
        'NAME':'indivo', # Required to be non-empty string
        'USER':'indivo', # Required to be non-empty string
        'PASSWORD':'ritvik',
        'Host':'', # Set to empty string for localhost.
        'PORT':'', # Set to empty string for default.
        },
}

今、postgresバックエンドで私がやったことは。

rohit@rohit-desktop:~$ Sudo su - postgres
postgres@rohit-desktop:~$ createuser --superuser indivo   # create a super user indivo
postgres@rohit-desktop:~$ psql  # open psql terminal 
psql (9.1.8)
Type "help" for help.

postgres=# \password indivo  # set the password ritvik
Enter new password: 
Enter it again: 
postgres=# \q   #logout 
postgres@rohit-desktop:~$ createdb -U indivo -O indivo indivo  #create db indivo 

残念ながら、syncdbを実行しようとするとエラーが発生します。

psycopg2.OperationalError: FATAL:  Peer authentication failed for user "indivo"

ここで何が間違っているのか助けてください。

40
masterofdestiny

私は同様の問題を抱えており、 この回答 settings.pyのlocalhost設定をHost設定に追加することで解決したため、データベース設定は次のようになります。

DATABASES = {
    'default':{
        'ENGINE':'Django.db.backends.postgresql_psycopg2', # '.postgresql_psycopg2', '.mysql', or '.Oracle'
        'NAME':'indivo', # Required to be non-empty string
        'USER':'indivo', # Required to be non-empty string
        'PASSWORD':'ritvik',
        'Host':'localhost', # <- Changed from empty string to localhost
        'PORT':'', # Set to empty string for default.
        },
}
45
juliocesar

多くのLinuxディストリビューションのデフォルトでは、DBへのUnixソケット接続のクライアント認証は「ピア」に設定されています。これはpg_hba.conf postgresqlの設定ファイル。 psycopg2 pythonライブラリドキュメントの状態:

-*ホスト*:データベースのホストアドレス(提供されない場合のデフォルトはUNIXソケット)

そのため、ホストオプションを空白のままにすると、スクリプトは認証にUnixユーザー名:パスワードを使用して接続しようとします。修正するには、次のいずれかを実行できます。

  1. 質問に貼り付けた構成コードに「ホスト」オプションを明示的に127.0.0.1に設定します。
  2. pg_hba.confファイルはソケット接続にmd5を使用するため、postrgres DBユーザーストアに保存されているユーザー名とパスワードを使用します(これはシステムユーザーの認証を中断する可能性があるため推奨されません)
26
queso

対象のユーザー、データベース、およびソースIPに対してpg_hba.conf認証を使用するには、md5を設定する必要があります。ドキュメントの クライアント認証 の章を参照してください。

スタックオーバーフローでpg_hba.confを検索すると、さらに多くの情報が得られます。

6
Craig Ringer

私もDjangoプロジェクトでpostgresqlデータベースを設定するときに同様の問題に直面していました。

私のシステムは、postgresqlバージョン10でRHEL CentOS 7を実行しています。/var/lib/pqsql/10/data/log/postgresql*.logにログが表示されるまで、多くを検索しましたが、実際に何が起こっているのかを見つけることができませんでした。

2017-11-10 00:31:40.499 IST [14129]詳細:接続がpg_hba.confの85行目に一致しました:「すべてホスト:: 1/128 identをすべてホスト」

したがって、ファイル/var/lib/pgsql/10/data/pg_hba.confの特定の行を変更しました。ホストからすべてすべて:: 1/128 ident

すべてをホストする:: 1/128 md5

それにより、manage.py migrateを使用してデータベースとテーブルを作成できます

この解決策を見つけてくれたすべての人に感謝します。特に@juliocesarおよびpostgresqlクライアント認証の公式ドキュメント

0
Gopal Prasad