48

パスワードなしでアクセスできるローカルホストにpostgresデータベースがあります

$ psql -d mwt
psql (8.4.12)
Type "help" for help.

mwt=# SELECT * from vatid;
  id   | requester_vatid |...
  -----+-----------------|...   
  1719 | IT00766780266   |...

そのデータベースにdjangoからアクセスしたいです。なので入れましたDATABASES

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'mwt',
        'USER': 'shaoran',
        'HOST': 'localhost'
    }
}

テスト データベースにアクセスするのにパスワードは必要ないためPASSWORD、設定に値を指定しませんでした。

$ ./manage.py shell
>>> from polls.models import Vatid
>>> Vatid.objects.all()
  connection_factory=connection_factory, async=async)
  OperationalError: fe_sendauth: no password supplied

使用してみPASSWORD: ''ましたが、同じエラーメッセージが表示されます。使用しようとしましPASSWORD: Noneたが、それも役に立ちませんでした。

これについてdjangoのドキュメントを検索してきましたが、役立つものは何も見つかりません。django.db.backends.postgresql_psycopg2空のパスワードを受け入れるように構成することは可能ですか?

4

5 に答える 5

28

Django でパスワードを使用しないようにするには、次の行を次のようにsettings.py変更md5します。trustpg_hba.conf

host    all             all             127.0.0.1/32            trust

postgres のセキュリティ構成の詳細については、このドキュメントをお読みください。

このファイルを見つけるには:

sudo -u postgres psql -c 'SHOW hba_file;'
于 2014-11-12T22:46:47.403 に答える
12

ユーザーによるpg_hba.conf接続を許可するかどうかを確認してから、Django設定でのパスワードを入力するか、ユーザーを信頼してくださいlocalhostshaoranshaoranpg_hba.conf

を介して接続できるという事実は、で信頼できるように設定されているいくつかのデフォルトの接続値を使用してpsqlいるためです。たとえば、私のマシンでは、デフォルトのホストはpsql -d mwtpg_hba.conflocal socketlocalhost

于 2012-06-25T15:36:53.490 に答える
6

同じ問題に直面していて、ここにある回答のさまざまな部分とグーグルの試行からの他の発見を組み合わせた後にのみ解決策を見つける人として、うまくいけば完全な回答をまとめることにしました

最初に注意すること:

それを入れること'HOST'も省略することも、settings.py実行可能なオプションです。ただし、配置するかどうかは'HOST'、postgresql 構成のセットアップ方法に影響します。

joerick's answer の'HOST'ように省略すると、psycopg2が Unix ドメイン ソケットで接続しようとします。一方、構成にキーが含まれている場合、psycopg2 は IPv4/6 経由で接続を試みます。postgresql 認証構成 ( ) はこれらの接続方法のいずれかに固有であるため、これは大きな違いを生みます。'HOST'localhost/etc/postgresql/x.x/main/pg_hba.conf

お持ち帰りメッセージ:

postgresql 認証構成でも構成した接続タイプを必ず選択してください。

2 つ目の注意事項:

postgresql 認証構成 ( /etc/postgresql/x.x/main/pg_hba.conf) では、エントリの順序が考慮されます。

ドキュメントは実際にはこれについて非常に明確です(それでも私はなんとかに陥りましたlocal all all peer):

接続タイプ、クライアント アドレス、要求されたデータベース、およびユーザー名が一致する最初のレコードが、認証の実行に使用されます。「フォールスルー」や「バックアップ」はありません。1 つのレコードが選択され、認証が失敗した場合、後続のレコードは考慮されません。一致するレコードがない場合、アクセスは拒否されます。

お持ち帰りメッセージ:

特定のルールは、より広範なルールの前に来るようにしてください。


これですべてがわかったので、パスワードを使用せずにアクセスする方法を次に示します'HOST'localhost


接続オーバーlocalhost

'HOST': 'localhost'のデータベース構成で次を指定しますsettings.py

# ...
'HOST': 'localhost',
# ...

'PASSWORD'は不要であり、省略できます。

postgresql 認証設定 ( ) で設定する必要があるルール/etc/postgresql/x.x/main/pg_hba.confは TYPE 用hostです。

ルールの順序に注意してください。したがって、パスワードなしでデータベース「my_database」にアクセスできるユーザー「my_user」がいる場合、正しい構成は次のようになります。

# RIGHT WAY...
host my_database my_user 127.0.0.1/32 trust
host my_database my_user ::1/128 trust
# ...
host all all 127.0.0.1/32 peer
# ...

順序を逆にすると、no password suppliedエラーが発生します。


Unix ドメイン ソケットを介した接続

'HOST'設定にキーを 入れないでください。'PASSWORD'も必要ありません。

postgresql 認証構成では、Unix ドメイン ソケット経由のアクセスは TYPE のルールで管理されますlocal

「my_user」がデータベース「my_database」への信頼できる (パスワードは不要) アクセスを取得する必要がある場合は、次のような行が必要です。

local my_database my_user trust

この行をどこに置くかに関して、ここでの規則は、とに関してより広い規則の前に置く必要があるということです。安全のため、先頭に置くことをお勧めします。ファイルが次のようになっている場合:DATABASEUSER/etc/postgresql/x.x/main/pg_hba.confpg_hba.conf

# RIGHT WAY...
local my_database my_user trust
# ...
local all all peer
# ...

パスワードなしで問題ありません。ただし、次のようになっている場合:

# WRONG WAY! ...
local all all peer
# ...
local my_database my_user trust
# ...

パスワードを入力する必要があります。


最後の注意:

の変更後、postgresql サービスを再起動することを忘れないでください/etc/postgresql/x.x/pg_hba.conf

sudo service postgresql restart

 

         これがお役に立てば幸いです。ハッピーコーディング!

于 2018-02-21T16:00:53.023 に答える