当我创建一个新用户,但它不能登录数据库。
我是这样做的:
postgres@Aspire:/home/XXX$ createuser dev
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y
然后创建一个数据库:
postgres@Aspire:/home/XXX$ createdb -O dev test_development
之后,我尝试psql -U dev -W test_development登录,但得到错误:
psql: FATAL: Peer authentication failed for user "dev"
我试图解决这个问题,但失败了。
虽然@flaviodesousa的答案可以工作,但它也强制所有用户(其他所有人)输入密码。
有时对其他人保持对等身份验证是有意义的,但对服务用户例外。在这种情况下,你会想要在pg_hba.conf中添加一行,看起来像这样:
local all some_batch_user md5
我建议你在注释标题行下面添加这一行:
# TYPE DATABASE USER ADDRESS METHOD
local all some_batch_user md5
重启PostgreSQL需要使用
sudo service postgresql restart
如果你使用的是9.3,你的pg_hba.conf很可能是:
/etc/postgresql/9.3/main/pg_hba.conf
当你指定:
psql -U user
它通过UNIX Socket连接,默认情况下使用对等身份验证,除非在pg_hba.conf中另有指定。
您可以指定:
host database user 127.0.0.1/32 md5
host database user ::1/128 md5
在loopback接口上为指定的数据库和用户获取TCP/IP连接(包括IPv4和IPv6)。
更改后,您必须重新启动postgres或重新加载它的配置。
在现代基于RHEL/Debian的发行版中重新启动:
service postgresql restart
重新加载应该以以下方式工作:
pg_ctl reload
但是该命令可能会根据PATH配置而不同——你可能必须指定绝对路径,这可能会不同,这取决于postgres的安装方式。
然后你可以使用:
psql -h localhost -U user -d database
使用该用户通过TCP/IP登录到指定的数据库。
Md5代表加密密码,也可以在授权时为明文密码指定密码。只要数据库服务器只能在本地访问,没有网络访问,这两个选项就不应该有什么大问题。
重要提示:
pg_hba.conf中的定义顺序很重要-规则是从上到下读取的,就像iptables一样,所以你可能想在规则上面添加建议的规则:
host all all 127.0.0.1/32 ident