使用psycopg2无密码连接到数据库

我有我的本地主机上我可以访问没有密码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' } } 

由于我不需要密码来访问我的testing数据库,我没有在设置中提供任何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的文档,但我找不到任何有用的东西。 有可能configurationdjango.db.backends.postgresql_psycopg2接受空密码?

检查你的pg_hba.conf以允许用户shaoran允许从localhost连接,然后在Django设置中提供shaoran的密码或者在pg_hba.conf信任用户

可以通过psql连接的事实是因为psql -d mwt使用了一些在pg_hba.conf中设置为可信的默认连接值。 例如,在我的机器上,默认主机是local socket而不是localhost

令人惊讶的是,答案是根本不指定主机。 如果你这样做,

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

然后psycopg2将以psql相同的方式使用Unix套接字进行连接。 当你指定一个HOST ,psycopg2将连接到需要密码的TCP / IP。

为了避免在Django settings.py使用密码,请将md5更改为trust pg_hba.conf这一行:

 host all all 127.0.0.1/32 trust 

要详细了解postgres安全configuration,请阅读本文档。

要find这个文件:

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