質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.34%

  • Python

    9190questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Django

    1176questions

    DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

  • PostgreSQL

    1141questions

    PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

DjangoでPostgreSQLのパスワード認証が通らない

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 508

mulberryfields

score 754

Django(Python)でWebアプリを作成しています。
デプロイ先の環境はOSがUbuntuServerで、データベースはPostgreSQLを使用しています。

PostgreSQL上に、testdatabaseというデータベースを作り、testuserというユーザー名を所有者にしています。パスワードは、TestPassword1234としています。PSQLでの操作は下記のとおり実行しました。
createdb testdatabase
ALTER DATABASE testdatabase OWNER TO testuser
ALTER USER testuser WITH PASSWORD 'TestPassword1234';

デプロイしようとしたのですが、いざ実行(python migrate)しようとすると、下記エラーが出ます。

django.db.utils.OperationalError: FATAL: password authentication failed for user "testuser"

settings.pyのデータベースに関する設定は、下記の通りになっています。

# settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'testdatabase',
        'USER': 'testuser',
        'PASSWORD': 'TestPassword1234',
        'HOST': '127.0.0.1',
        'PORT': 5430,
    }
}

パスワードは合っているはずなのに、なぜ通らないのか、行き詰ってしまったのですが、もし、思い当たる点がある方がみえましたら、ご教示頂ければ大変助かります。
よろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

まず確認ですが

デプロイしようとしたのですが、いざ実行(python migrate)しよう

migrate=マイグレーションですよね。
python migrateとはDjangoのコマンドを意味しますよすね。具体的には

$ python manage.py makemigrations ・・・

でしょうか。
実行したコマンドを教えてください。

 おおまかな回答

(たぶんDjangoのフォルダ構成や設定に従ったファイル編集、コーディングをされていると思うので)

FATAL: password authentication failed for user "testuser"

これはPostgrs SQL側の原因です。
Djangoのエラー書式ででていますが、後半はデータベースが出したエラー文句です。
そして意味は

("testuser"でログインしようとしたが、入力されたパスワードでは認証・ログインに失敗した)

ですので考えれることは

testuserユーザーのパスワードが設定されていない、または違うパスワードを使っている

1.一度シェルからpsqlコマンドを実行して、作成したデータベースにログインできるか確認してください。

psql -U testuser -h localhost -W

 ←'HOST': '127.0.0.1'とあるので、ローカルのDBですからlocalhostを指定します

2.ログインに失敗するようですと、上に書いたことが原因です。今度はpostgresユーザーでログインしてください。

psql -l -U postgres


を実行してパスワードを入力し、ログインできるか確認します。
ログインできたなら、
ユーザーテーブルを見て、testuserのpassword列の値を確認してください。
誤りがあれば、修正してください。

3.もし結果、postgresユーザーでもログインできない場合には

postgresユーザのパスワードではじかれているのでは?

ということになります。
一度postgresql.conf, pg_hba.confにあるpasword設定項目を確認し
誤りがあれば、修正してください。

参考
windows版postgreSQLでパスワード認証に失敗する

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/20 16:36

    ご回答頂き、ありがとうございます。

    1.下記のログインはできませんでした。
    psql -U testuser -h localhost -W

    2.psql -l -U postgresではログインできない(FATAL: Peer authentication failed for user "postgres")のですが、
    su postgres
    で、postgresになってからは、psqlコマンドだけでアクセスできます。
    psqlで、select * from pg_shadow;
    をすると、testuserのパスワードが、「md5…」という長い文字列になっていました。
    ひょっとして、これが原因なのでしょうか。


    psql -l -U postgres

    キャンセル

  • 2018/04/20 16:58

    はじめまして
    md5ということは暗号化されたパスワードですね。
    そうすると、Djangoに設定されているパスワード(平文?)と
    DBのエンコードされたパスワードを比較し、認証が通りません、
    となっているかもです。

    参考になるかわかりませんが
    https://docs.djangoproject.com/ja/2.0/ref/settings/#std:setting-DATABASES

    あとネットでPostgreSQLを使ったDjangoの作成を
    検索してみてください。

    キャンセル

  • 2018/04/20 17:05

    追記です
    # 念のため、Djangoのフォルダすべて、Djang0が接続するDBのバックアップを取った方がいいです。

    さっき昔の設定ファイルがあったので、見ました。
    #適当に改変してあります。

    # Database
    # https://docs.djangoproject.com/en/1.7/ref/settings/#databases

    DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
    }

    ここにある
    「DATABASES = {」の内容も確認してください。
    # 差し支えない範囲で、公開すると、ほかの人の回答があるかもしれません。

    キャンセル

  • 2018/04/21 00:19

    ありがとうございます。
    できました。
    https://qiita.com/shigechioyo/items/9b5a03ceead6e5ec87ec
    を参考にしました。
    pg_hba.confの中の、
    local all all peer

    local all all md5
    にしたうえで、PostgreSQLを再起動したら、うまくいきました。

    キャンセル

  • 2018/04/21 00:47

    うまくいきましたか。よかったです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Python

    9190questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Django

    1176questions

    DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

  • PostgreSQL

    1141questions

    PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。