Мои настройки:
Я создал нового пользователя (jdoe) в моем локальном PostgreSQL с помощью следующей команды в оболочке psql:
CREATE USER jdoe WITH PASSWORD 'password';
Я также создал новую базу данных под названием mydb
. Моя цель - дать пользователю jdoe
полный доступ к базе данных mydb
. Я сделал несколько вещей через графический интерфейс pgAdmin III и после запуска \l
в оболочке psql я получаю следующий результат:
List of databases
Name | Owner | Encoding | Collation | Ctype | Access privileges
--------------+----------+----------+-------------+-------------+---------------
mydb | jdoe | UTF8 | en_CA.UTF-8 | en_CA.UTF-8 | =CTc/mydb
: hmart=CTc/mydb
postgres | postgres | UTF8 | en_CA.UTF-8 | en_CA.UTF-8 |
Показывает мой список пользователей (\du
), Я получил:
List of roles
Role name | Attributes | Member of
-----------+-------------+-----------
jdoe | | {}
postgres | Superuser | {}
: Create role
: Create DB
Я не могу точно сказать из вышесказанного, была ли моя цель достигнута, но есть ли способ проверить, jdoe
может общаться с базой данных mydb
? Я тестирую его через настройки Django:
DATABASE_ENGINE = 'postgresql_psycopg2'
DATABASE_NAME = 'mydb'
DATABASE_USER = 'jdoe'
DATABASE_PASSWORD = 'password'
DATABASE_HOST = ''
DATABASE_PORT = ''
но я получаю следующую ошибку после python manage.py syncdb
:
psycopg2.OperationalError: FATAL: Ident authentication failed for user "jdoe"
Я сделал все вышеперечисленное на Win XP с последней установкой PostgreSQL, и все работает безупречно с Django. Я не уверен, что мне не хватает в Ubuntu.
Вероятно, вы настроили его в pg_hba.conf, чтобы локальные сокет-соединения должны использовать идентификацию авторизации, в то время как TCP-соединения с localhost являются доверенными. Прочтите документацию на pg_hba.conf для вашей версии, например, 8.4 Вот, и вы можете правильно настроить его для своей ситуации.
Это странно, установка DATABASE_HOST
к localhost
исправить проблему:
# settings.py
DATABASE_HOST = 'localhost'