当前位置:  开发笔记 > 后端 > 正文

PG :: ConnectionBad:fe_sendauth:没有提供密码

如何解决《PG::ConnectionBad:fe_sendauth:没有提供密码》经验,为你挑选了3个好方法。

当我尝试在本地postgres数据库上运行"rake test"时,它会抛出上述异常.

这是我的pg_hba.conf文件:#Unix域名套接字本地所有postgres peer的数据库管理登录

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             username                                  peer
local   myapp_dev   myapp                               md5
local   myapp_test  myapp                               md5
local   myapp_prod  myapp                               md5
#local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            md5
#host    replication     postgres        ::1/128                 md5

这是我的database.yml的相关部分

test:

adapter: postgresql
database: myapp_test
pool: 5
timeout: 5000
host: localhost
username: username
password:

在真正的database.yml中,'username'替换为我登录的实际用户名.由于身份验证方法定义为"peer",因此不需要密码.

我也注意重启Postgres

sudo -u postgres pg_ctlcluster 9.3 main restart

我还缺少什么?



1> Daniel Vérit..:

localhost作为主机引用TCP连接,这意味着auth方法是md5(需要密码)每个你的pg_hba.conf:

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

对于peer将要采取的方法,你需要通过Unix域套接字连接,因为你似乎可以用一个debian样的操作系统,这意味着把/var/run/postgresqlhost外地,或者什么都没有(这是默认的,除非环境变量说除此以外).

编辑:如果使用数据库URI(自Rails-4.1以来支持,如 http://weblog.rubyonrails.org/2014/4/8/Rails-4-1/中所述),语法可能是:

对于localhost:
test: "postgresql://localhost/myapp_test"

对于默认的Unix套接字域(主机字段留空):
test: "postgresql:///myapp_test"


`pg_hba.conf`文件位于Ubuntu上的`/ etc/postgresql/9.3/main/pg_hba.conf`中
用""替换"localhost"就可以了.谢谢!
请注意**主机字段**是指database.yml中的```host:localhost```,我使用```host:/ var/run/postgresql```它也可以.谢谢回答!(在Debian 7.8下)

2> Ravistm..:

更改下面的代码,它将工作

pg_hba.conf:
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

低于其解释:

信任

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

MD5

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

在这里提及更多


它实际上对我有用.但有人可以详细说明它是否相当安全?这是否意味着,从现在起所有连接都会省略密码?

3> s2t2..:

如果您的hb_conf已被修改为强制密码,那么请确保您的rails app的数据库配置在开发和测试环境中都包含密码.

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  host: localhost
  username: your_user
  password: your_password

development:
  <<: *default
  database: your_db_development

test:
  <<: *default
  database: your_db_test

production:
  url: <%= ENV['DATABASE_URL'] %>

当我无法为测试数据库提供密码时,我收到此错误.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有