Подключиться к базе данных с помощью 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'
}
}
Поскольку мне не нужен пароль для доступа к моей тестовой базе данных, я не предоставлял никаких значений 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
принимать пустой пароль?
Ответы
Ответ 1
Проверьте pg_hba.conf
, чтобы разрешить подключение localhost
пользователем shaoran
, либо укажите пароль shaoran
в настройках Django или доверьтесь пользователю в pg_hba.conf
Тот факт, что вы можете подключиться через psql
, состоит в том, что psql -d mwt
использует некоторые значения соединения по умолчанию, которые установлены как доверенные в pg_hba.conf
. Например, на моей машине хостом по умолчанию является local socket
вместо localhost
Ответ 2
Удивительно, но ответ заключается в том, чтобы не указывать хост вообще. Если вы это сделаете,
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mwt',
}
}
Затем psycopg2 будет подключаться с помощью гнезда Unix таким же образом, как psql
. Когда вы укажете HOST
, psycopg2 будет подключаться к TCP/IP, для которого требуется пароль.
Ответ 3
Чтобы избежать использования пароля в Django settings.py
измените md5
на trust
в этой строке pg_hba.conf
:
host all all 127.0.0.1/32 trust
Для более детального понимания конфигураций безопасности postgres читайте этот документ.
Чтобы найти этот файл:
sudo -u postgres psql -c 'SHOW hba_file;'