为什么 psycopg2.connect 不检查密码?

amo*_*mos 2 postgresql psycopg2

psycopg2我今天第一次玩,我试图了解密码是如何工作的......我有一个测试脚本,它删除一个表,重新创建表,添加一行,然后打印该行。我的问题是,为什么connect无论我是否提供正确的密码,该命令都会起作用?例如这一行:

conn = psycopg2.connect(database="mydb",host="localhost",port=5432,user="amos",
                        password="asdf")
Run Code Online (Sandbox Code Playgroud)

和这一行:

conn = psycopg2.connect(database="mydb",host="localhost",port=5432,user="amos",
                        password="asdf123")
Run Code Online (Sandbox Code Playgroud)

意外地做了同样的事情,并且脚本的其余部分完成且没有错误。显然,无论密码实际是什么,只有其中一行应该起作用。正如预期的那样,如果我尝试 a ,我确实会收到错误user="amos123",因为该用户不存在。如果重要的话,我的 PostgreSQL 安装了Postgres.app.

amo*_*mos 6

经过一番研究,我发现登录条件是在一个名为 的文件中指定的pg_hba.conf,在我的安装中默认有以下行:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
Run Code Online (Sandbox Code Playgroud)

根据这个trust意味着它不检查密码。我想这对这个新手来说是不直观的,因为如果这种行为是我想要的,我一开始就不会设置密码。我将其发布在这里是为了节省未来的谷歌用户一些时间。