Python 为什么在尝试使用psycopg2连接时出现对等身份验证失败错误?
因此,我在Ubuntu上成功安装了Postgres,并尝试进行一些基本连接,并使用默认用户名(Postgres)以外的另一个用户名在db中创建一个表。据我所知,我认为这可能与权限有关?我想要的是能够使用postgres以外的超级用户来创建表和做一些事情 “psql example3”和“\l”显示example3数据库已成功创建。我现在有一个数据库列表,其中包括默认postgres、template0、template1和example3,所有这些数据库的所有者都是postgres。然后我遇到的问题是运行demoscript.py会给出一个致命的“用户'thisuser'的对等身份验证失败”Python 为什么在尝试使用psycopg2连接时出现对等身份验证失败错误?,python,python-3.x,postgresql,psycopg2,Python,Python 3.x,Postgresql,Psycopg2,因此,我在Ubuntu上成功安装了Postgres,并尝试进行一些基本连接,并使用默认用户名(Postgres)以外的另一个用户名在db中创建一个表。据我所知,我认为这可能与权限有关?我想要的是能够使用postgres以外的超级用户来创建表和做一些事情 “psql example3”和“\l”显示example3数据库已成功创建。我现在有一个数据库列表,其中包括默认postgres、template0、template1和example3,所有这些数据库的所有者都是postgres。然后我遇到的
预期的结果是todos表应该显示为在Example3DB中查找后创建的。但是我刚刚得到一个致命错误。当您在连接中没有指定主机时,它会尝试通过Unix套接字进行连接。默认情况下,PostgreSQL设置为对这些用户使用对等身份验证,这意味着它会将PostgreSQL用户名与当前登录的OS用户进行比较。如果您将连接更改为:
connection = psycopg2.connect('dbname=example3 user=thisuser password=thispass host=localhost')
这将导致它使用TCP/IP连接的身份验证设置,这在我使用过的大多数系统上默认为密码身份验证。谢谢!我假设对等身份验证需要类似“sudo-u postgres python demoscript.py”的东西,对吗?另外,如果指定了主机但没有提供密码(即,在用户创建过程中,密码字段留空),那么如果您以用户“postgres”的身份连接到数据库,那么该命令会起作用,您是否碰巧知道会发生什么。对等身份验证将Postgres用户名与运行试图连接的程序的操作系统用户进行比较,如果两者相同,则允许访问。至于创建一个没有密码的用户,我不确定结果会是什么,但我怀疑使用密码身份验证的连接会失败。有关配置postgres如何对用户进行身份验证的更多信息,请参阅
#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()
connection = psycopg2.connect('dbname=example3 user=thisuser password=thispass host=localhost')