1

私は今Djangoを学んでいて、Djangoの本を段階的にフォローしています。

第5章に進んでDjangoプロジェクトをデータベースに接続すると、接続できません。エラーが発生します:

FATAL:  password authentication failed for user "postgres"

コードは次のとおりです。

settings.py構成:

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
    'NAME': 'postgis',                      # Or path to database file if using sqlite3.
    'USER': 'postgres',                      # Not used with sqlite3.
    'PASSWORD': 'XXXXXXX',                  # Not used with sqlite3.
    'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
    'PORT': '8904',                      # Set to empty string for default. Not used with sqlite3.
}
}

しかし、Pythonシェルでこれらのコードを使用して接続と設定をテストしている場合:

from django.db import connection
cursor=connection.cursor()

シェルはエラーで応答します:

Traceback (most recent call last):
File "<console>", line 1, in <module>
File "E:\Python27\lib\site-packages\django-1.4.1-    py2.7.egg\django\db\backends\__init__.py", line 306, in cursor
cursor = self.make_debug_cursor(self._cursor())
File "E:\Python27\lib\site-packages\django-1.4.1-py2.7.egg\django\db\backends\
postgresql_psycopg2\base.py", line 177, in _cursor
self.connection = Database.connect(**conn_params)
File "E:\Python27\lib\site-packages\psycopg2\__init__.py", line 179, in connect
connection_factory=connection_factory, async=async)
OperationalError: FATAL:  password authentication failed for user "postgres"

次に、PostgreSQLパッケージとpycopg2パッケージを再インストールしました。サーバーを実行してデータベースに接続するためにpgAdminIIIを起動し、Pythonシェルで同じコードを実行しましたが、問題は解決していません。

助けが必要!

4

2 に答える 2

5

間違ったパスワードを使用しているか、pg_hba.conf正しく構成されていない可能性があります。

必要な資格情報を使用して接続できますpsqlか? 試す:

psql -U postgres -W -p 8904 postgis

そうでない場合は、ユーザーがまたはセキュリティを使用していることを確認pg_hba.confしてください。パスワード接続を使用する場合は、. 設定を変更した場合は、PostgreSQL を使用するか、再起動して変更を有効にします。postgresidentmd5md5pg_ctl reload

pg_hba.confでDBに接続してpsql実行することで見つけることができますSHOW hba_file;。例えば:

sudo -u postgres psql -c 'SHOW hba_file;'

とにかく、アプリケーション接続に PostgreSQL スーパーユーザーを使用しないでください。新しいユーザーを作成し、Django が新しいデータベースでそのユーザーを使用するようにします。たとえば、 という名前のユーザーと、そのユーザーが所有するdjangoという名前のデータベースを作成するには、次のようにします。django_dbdjango

sudo -u postgres createuser -SDR -P django
sudo -u postgres createdb -O django_db django;

は、ユーザーがスーパーユーザーであってはならず、または権限を持ってはならない-SDRというデフォルトを明示的にします。djangoCREATEDBCREATEUSER

于 2012-08-20T02:17:41.887 に答える
0

PostgreSQL 14+ では、エラーを取得する新しい方法がありfe_sendauth: error sending password authenticationます。

PostgreSQL 14 リリース ノートに記載されているように、クライアントとサーバーの両方が、FIPS モードを強制する OpenSSL EVP API を使用するようになりました。パスワードに が使用md5されている場合、FIPS 構成で許可されていない場合、PostgreSQL 14 を使用してログインすることはできませんmd5

を使用してデフォルトpassword_encryption設定を確認し、次の方法SHOW password_encryption;で単一のユーザーを手動で更新できます。

SET password_encryption  = 'scram-sha-256'; 
ALTER USER "user" with password 'password';

password_encryption新しいユーザーのパスワードのデフォルト設定を永続的に変更するには、次を更新しpostgresql.confます。

password_encryption = scram-sha-256

PostgreSQL 14 リリース ノートから:

  • SHA1、SHA2、および MD5 ハッシュ計算が OpenSSL EVP API を使用するように変更されました。 (Michael Paquier)

    これはよりモダンで、FIPS モードをサポートしています。

  • password_encryption サーバー パラメータのデフォルトをscram-sha-256(Peter Eisentraut)に変更します。

    以前は でしたmd5。このサーバー設定が変更されるか、パスワードが MD5 形式で指定されない限り、すべての新しいパスワードは SHA256 として保存されます。また、以前は のシノニムであったレガシー (および文書化されていない) ブール値のような値はmd5受け入れられなくなりました。

于 2022-03-01T17:18:00.813 に答える