如何配置PostgreSQL使其接受用户名和密码验证?

42

我刚安装了最新的Ubuntu 10.10并更新了所有内容,还安装了PostgreSQL 8.4。

为了让PostgreSQL接受登录+密码连接,我已通过以下方式进行了配置:

sudo su postgres
psql
ALTER USER postgres WITH PASSWORD 'password';
CREATE DATABASE myapp;
\q
exit
sudo vi /etc/postgresql/8.4/main/pg_hba.conf
change "local all all indent" to "local all all trust"

但是,令人惊讶的是,这并没有起作用!命令为

psql -U postgres password

出现错误的评估:

psql: FATAL:  Ident authentication failed for user "postgres"

有什么提示可以帮助我让psql -U正常工作吗?

4个回答

52

最好保留"postgres"用户的身份验证方式为“ident”。我认为Ubuntu默认使用“postgres”用户执行升级、备份等操作,这需要它能够无需指定密码登录。

我建议创建另一个带有管理员权限的用户(可能是您自己的用户名),然后在本地连接中使用该用户并设置密码。

以下是我的pg_hba.conf文件的相关部分:

# allow postgres user to use "ident" authentication on Unix sockets
# (as per recent comments, omit "sameuser" if on postgres 8.4 or later)
local   all   postgres                         ident sameuser
# allow all other users to use "md5" authentication on Unix sockets
local   all   all                              md5
# for users connected via local IPv4 or IPv6 connections, always require md5
host    all   all        127.0.0.1/32          md5
host    all   all        ::1/128               md5

请注意,psql -U postgres password 不会实现你想要的功能。密码不应该在命令行中明确指定。这将尝试使用用户名“postgres”登录到名为“password”的数据库。

相反,您应该使用 psql -U postgres myapp。如果已正确配置需要密码,则Postgres将自动提示您输入密码。

如果我们希望密码自动填写,则可以将其放在 $HOME/.pgpass 文件中。


添加具备管理员权限的新用户的正确方法是什么? - grigoryvp
使用“CREATE USER puser WITH PASSWORD 'password'”添加用户并执行“psql -U puser”会评估出错“psql:FATAL:database "puser" does not exist”。 - grigoryvp
1
通常使用createuser命令行实用程序比使用SQL创建用户更容易。它具有使用户成为管理员的选项。此外,如果它告诉您数据库不存在,则登录成功。默认情况下,Postgres尝试登录到用户的“主页”数据库,该数据库与用户名称相同。要么创建一个“puser”数据库,要么尝试psql -U puser myapp以登录到“myapp”。 - cecilkorik
另外,如果要将您的新“puser”变成管理员,您应该能够执行以下操作:ALTER USER puser WITH CREATEUSER CREATEDB - cecilkorik
3
从PostgreSQL 8.4开始,“ident sameuser”需要更改为“ident”。 - ryandesign

3
我认为你的 pg_ident.conf 文件配置有误。此外,你尝试过吗?
psql -U postgres -W

1
另一个可能导致这种情况发生的原因是过期的凭据。我认为在版本8中没有发生过这种情况,但在版本9中,当您在pgadmin中创建新角色时,它将以过期状态创建,您需要更改或清除角色的过期日期,然后才能使用该角色登录。

1

您可能会发现,在PostgreSQL中创建数据库的用户和架构非常有帮助:

  1. postgres用户登录到PostgreSQL
$ sudo -u postgres psql postgres

一旦进入系统,创建用户和数据库。
CREATE ROLE myuser LOGIN PASSWORD 'mypass';
CREATE DATABASE mydatabase WITH OWNER = myuser;

使用新用户账户登录到PostgreSQL
$ psql -h localhost -d mydatabase -U myuser -p <port>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接