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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Django

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

PostgreSQL

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

Python

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

Q&A

解決済

1回答

15272閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

Django

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

PostgreSQL

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

Python

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

0グッド

0クリップ

投稿2018/04/19 23:53

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のデータベースに関する設定は、下記の通りになっています。

python

1# settings.py 2DATABASES = { 3 'default': { 4 'ENGINE': 'django.db.backends.postgresql_psycopg2', 5 'NAME': 'testdatabase', 6 'USER': 'testuser', 7 'PASSWORD': 'TestPassword1234', 8 'HOST': '127.0.0.1', 9 'PORT': 5430, 10 } 11}

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まず確認ですが

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

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

Python

1$ 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でパスワード認証に失敗する](https://qiita.com/tomlla/items/9fa2feab1b9bd8749584)

投稿2018/04/20 02:52

kawakawa2018

総合スコア1195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/04/20 07: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
kawakawa2018

2018/04/20 07:58

はじめまして md5ということは暗号化されたパスワードですね。 そうすると、Djangoに設定されているパスワード(平文?)と DBのエンコードされたパスワードを比較し、認証が通りません、 となっているかもです。 参考になるかわかりませんが https://docs.djangoproject.com/ja/2.0/ref/settings/#std:setting-DATABASES あとネットでPostgreSQLを使ったDjangoの作成を 検索してみてください。
kawakawa2018

2018/04/20 08: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/20 15:19

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

2018/04/20 15:47

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問