Почему при попытке установить соединение с использованием psycopg2 возникает ошибка одноранговой аутентификации? - PullRequest
0 голосов
/ 28 сентября 2019

Итак, я успешно установил Postgres в Ubuntu и пытаюсь установить какое-то базовое соединение и создать таблицу в БД, используя другое имя пользователя, отличное от имени по умолчанию (postgres), и у меня не получится.Из того, что я могу собрать, я думаю, что это может иметь какое-то отношение к разрешениям?Я хочу использовать суперпользователя, кроме postgres, для создания таблиц и прочего.

"psql example3" и "\ l" показывают, что база данных example3 была успешно создана.Теперь у меня есть список баз данных, включающий стандартные postgres, template0, template1 и example3, все с владельцем как postgres.Затем я сталкиваюсь с проблемами при запуске demoscript.py, который приводит к фатальной ошибке «аутентификация равноправного узла для пользователя« thisuser »»

#Create the db and user with superuser permissions
sudo -u postgres -i
createdb example3
createuser --interactive --pwprompt
#role:thisuser
#pwd:thispass
#superuser?:Y
#demoscript.py
import psycopg2 
connection = psycopg2.connect('dbname=example3 user=thisuser password=thispass')
cursor = connection.cursor()
cursor.execute('DROP TABLE IF EXISTS todos;')

cursor.execute('''
    CREATE TABLE todos(
        id serial PRIMARY KEY,
        description VARCHAR NOT NULL
        );
''')
connection.commit()
cursor.close()
connection.close()

Ожидаемый результат состоит в том, что таблица задач должна отображаться как созданная после поискаэто в примере 3 дБ.Но я просто получаю фатальную ошибку.

1 Ответ

0 голосов
/ 28 сентября 2019

Когда вы не указываете хост в вашем соединении, он пытается соединиться через сокеты Unix.По умолчанию PostgreSQL настроен на использование одноранговой аутентификации на них, что означает, что он сравнивает имя пользователя PostgreSQL с текущим вошедшим в систему пользователем ОС.Если вы измените свое соединение на:

connection = psycopg2.connect('dbname=example3 user=thisuser password=thispass host=localhost')

, это должно привести к тому, что оно будет использовать настройки аутентификации для соединений TCP / IP, которые по умолчанию используются для аутентификации по паролю в большинстве систем, которые я использовал.

...