PostgreSQL的psql.exe不验证密码

时间:2016-08-15 11:21:27

标签: postgresql powershell

我的PostgreSQL存在问题 - psql.exe忽略了我写的任何密码。

到目前为止我做了什么:

我运行一个简单的(Powershell)脚本来启动Postgre:

Start-Process -FilePath "C:\Program Files\PostgreSQL\pg95\bin\pg_ctl.exe" `
  'start -D "C:\Program Files\PostgreSQL\data\pg95"''

运行后,我现在可以使用以下内容访问数据库:

& "C:\Program Files\PostgreSQL\pg95\bin\psql.exe" `
  --dbname=$databaseName --host=$dbHost --username=$userName -c $sqlString

但最不幸的是终端没有提示我输入密码

这很奇怪,因为psql.exe --help给出了这一行:

..
-W, --password: force password prompt (should happen automatically)

但事实并非如此。 当我尝试应用-W时,它会提示我,但忽略我写的内容,让我访问数据库。

所以解决方案可能是%appdata%\Postgresql\pgpass.conf设置密码,但它是空的。 另一种解决方案是设置环境变量PGPASSWORD,但我无法在任何地方看到它。我在Powershell中尝试Get-ChildItem Env:,在cmd中尝试set,但都没有设置。

欢迎任何建议。

1 个答案:

答案 0 :(得分:2)

我见过的最短但最有帮助的答案,@ abelisto。

pg_hba.conf位于c:\Program Files\PostgreSQL\data\pg95\下面说:

# TYPE  DATABASE        USER            CIDR-ADDRESS            METHOD

# IPv4 local & remote connections:
host    all             all             127.0.0.1/32            trust
host    all             all             0.0.0.0/0               md5
# IPv6 local connections:
host    all             all             ::1/128                 trust

From Abelisto's link trust定义为:

  

无条件地允许连接。此方法允许任何可以连接到PostgreSQL数据库服务器的人以他们希望的任何PostgreSQL用户身份登录,而无需密码或任何其他身份验证。

将它们切换为md5会产生更好的结果:

  

要求客户端提供双MD5哈希密码以进行身份​​验证。