2011-11-17 25 views
109
OperationalError at /admin/ 

FATAL: Peer authentication failed for user "myuser" 

私はDjangoの管理サイトにアクセスしようとするとエラーが発生します。私は問題のMySQLデータベースを使用していた。私はPostgreSQLを初めて使用していますが、最終的にこのプロジェクトで使用する予定のホストがMySQLを持っていないため、切り替えを決定しました。PostgreSQLへのDjango接続: "ピア認証に失敗しました"

したがって、私はPostgreSQLをインストールし、syncdbを実行し、すべて設定することができると考えました。

問題は、私のアプリケーションがデータベースに接続するように見えないということです。私はダウンロードしたコマンドラインまたはデスクトップアプリケーションを使用してPostgreSQLにログインできます。ちょうどスクリプトではありません。

また、manage.py shellを使用してdbにアクセスできます。

どのような考えですか?

答えて

187

私は例外を見て、私の接続設定と関係があることに気づいた。 settings.pyに戻って、私がホストセットアップを持っていないのを見た。 localhostとvoilaを追加します。

私のsettings.pyにはMySQLデータベース用のHOSTがありませんでしたが、PostgreSQL用にこれを追加する必要がありました。

私の場合、HOSTの設定にlocalhostを追加して動作させました。

私のsettings.pyDATABASESセクションです。

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'NAME': '<MYDATABASE>', 
     'USER': '<MYUSER>', 
     'PASSWORD': '<MYPASSWORD>', 
     'HOST': 'localhost', # the missing piece of the puzzle 
     'PORT': '', # optional, I don't need this since I'm using the standard port 
    } 
} 
+5

をあなたはあなたの答えに質問からソリューションを移動する(そして、それを受け入れる)考えるかもしれません。このようにして、質問は依然として問題となり、適切に答えを提供するでしょう。ところで、良い仕事! :-) –

+0

するでしょう。ありがとう。 –

+0

同じ問題をRails 3で見つけて、あなたの提案が問題を解決しました。乾杯! – Marco

6

私は(信頼するMD5を変更することが/etc/postgres/9.1/main/pg_hba.confの下を編集することによって、これを固定;注これは何もないかもしれない、何のデータベースのパスワードがないことを意味しますあなたが欲しい)

# TYPE DATABASE USER  CIDR-ADDRESS   METHOD 

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

これはmd5に設定するだけです。あなたのスクリプトは、(myuserのここ)に接続しようとしているものとは他のユーザーの下で実行されているため、おそらくです

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

+1;しかし、md5は一般的に(わずかに)パスワードよりもハッシュを送るので、パスワードよりも優れています。 (ローカルの場合はそれほど重要ではありませんが、ネットワーク上で盗聴者がいる可能性があります。重要です。) –

+0

PostgreSQLがパスワードハッシュを暗号化しない場合、それがどうかわからない場合は誰でも洗練されますあなたの接続を実際に盗聴するのに十分なのはおそらく、虹のテーブルを介してあなたのハッシュを実行し、あなたのセキュリティを破ります。 –

+0

"md5"は "信頼"より優れていますが、 "ピア"を使用し、ログイン権限のないLinuxユーザーをローカル接続専用に作成するのが最善です。こうすることで、ローカルのデータベースにアクセスするためのルートパスワードを入力する必要があります。 –

18

。この場合、ピア認証は失敗します。 HOST: "localhost"の解決策は、ピア認証をもう使用していないために機能します。ただし、UNIXソケットを使用する代わりに、TCP接続を使用するため、HOST: ""よりも遅くなります。 django docsから:あなたは、PostgreSQLを使用している場合

、デフォルト(空HOST)によって、データベースを への接続はUNIXドメインソケット( pg_hba.confの中に「ローカル」ライン)を介して行われます。 TCPソケットを使用して接続する場合は、HOSTを 'localhost'または '127.0.0.1'(pg_hba.confの 'host'行)に設定します。 Windowsの場合 UNIXドメインソケットは でないため、常にHOSTを定義する必要があります。

ソケットを使い続けたい場合は、pg_hba.confの設定を修正する必要があります。最も単純なものは

local all   all        trust 

他のすべての設定はlocalです。この変更を有効にするには、postgresを再ロードする必要があります。

しかし、マルチユーザプロダクションマシンが問題になっている場合は、md5hereなどのさまざまな認証方法の説明を参照)などのより安全なものを使用することをおすすめします。

+1

これはanwerでなければなりません...(もっとdocs、より多くの説明) – ThePhi

3

私はちょうど同じ問題に遭遇しましたが、クライムが言ったように、しかしまだpeerの方法を使って、UNIXソケットを使いたかったのです。 peerメソッドで動作しているpg_hba.confの中の私のシステムユーザ名をpostgresユーザ名にマッピングしました。 pg_hba.confインサイド

私が追加:pg_ident.confインサイド

local all all peer map=map-name 

を私が追加:

map-name mysystem-username mypostgres-username 
関連する問題