为PostgreSQL用户设置空密码

71

我使用postgresql命令 'createuser myusername'。它总是提示我输入密码。如果我不输入密码,它会报错说未指定密码。

我只想创建一个没有密码的用户,但在mac os x下的Postgresql 9中无法实现。

我应该采取哪些步骤来创建一个没有密码的用户。该命令总是要求我输入密码。

4个回答

72

使用createuser无法解决这个问题。根据createuserman页面,如果设置了--no-password,则登录将失败,如果您确实需要密码,则无法使用该选项。 createuser仅仅创建一个用户,它并不决定用户如何进行身份验证。

身份验证主要在pg_hba.conf中处理,该文件决定是否需要在登录时输入密码。我从未在OS X上运行过PostgreSQL,在Linux上,我的发行版的默认配置如下:

# TYPE  DATABASE        USER            CIDR-ADDRESS            METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     ident
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

请确认你已经像第一行那样设置了开发环境访问。注意:psql 如果没有设置 --host 选项,将会尝试通过 Unix socket 进行连接。如果你尝试使用 psql --host localhost 进行连接,则会使用第二行。


1
在 Mac OS X 或 Linux 系统中,文件 pg_hba.conf 的位置在哪里? - othman
2
对于Ubuntu系统,您可以在/etc/postgresql/9.0/main/pg_hba.conf(适用于PostgreSQL 9.0)中找到它。 - jmonteiro
4
在OS X 10.6.8中,您可以在“/Library/PostgreSQL/8.3/data/pg_hba.conf”找到它。请注意,它归属于“postgres”用户,因此您需要使用“su postgres”命令进行编辑。 - Chris
1
CentOS 上的位置是 /var/lib/pgsql/9.3/data/pg_hba.conf - XåpplI'-I0llwlg'I -
使用OSX 10.10.2上的PostgreSQL 9.4安装程序,默认位置为/Library/PostgreSQL/9.4/data/pg_hba.conf。请注意,在将方法从md5更改为ident后,我必须重新启动数据库: sudo -u postgres pg_ctl -D /Library/PostgreSQL/9.4/data restart - hert
注意:如果没有设置--host选项,psql将尝试使用Unix套接字进行连接。 - Zach Smith

39

使用.pgpass

与创建没有密码的用户不同,另一种选择是创建一个.pgpass文件,在其中添加密码以自动提供密码。所有使用libpq进行连接的应用程序都会尊重此文件,实际上除了JDBC驱动程序和.NET驱动程序之外,几乎所有的应用程序都使用它。

以下是如何为用户“foobar”和密码“password”创建示例.pgpass文件,并设置正确的文件权限:

echo 'localhost:*:*:foobar:password' >> ~/.pgpass
chmod 600 ~/.pgpass

在我的 Mac 上可以工作,但是在 Ubuntu 上(通过 WSL)无法工作。 - Daniel Vilela
你,我的朋友,是一个冠军。这是我首选的解决方案,它在我的 Mac 上运行良好,因为我的 postgres 用户设置了密码,但我需要运行的脚本没有提供密码,因为它可以在任何人的机器上运行。 - Steve

14

为PG用户更改密码的另一种方法(我更喜欢这种方法)是登录到Postgres控制台(作为本地PC上的postgres用户),并发出SQL请求:

另一种更改PG用户密码的方式(我更喜欢这种方式)是登录到Postgres控制台(使用本地PC上的postgres用户),并执行以下SQL请求:

$ sudo -u postgres psql -w

# ALTER USER postgres WITH PASSWORD '';

1
请注意,如果服务器需要密码,则此操作可能会禁用帐户! - 0atman
6
无法运行。错误:psql: fe_sendauth: 未提供密码。 - Romulus
@Romulus,你之前为系统用户“postgres”设置过密码吗?另外,你需要尝试使用“-w”,即“psql -w”。 - Малъ Скрылевъ
我没有为 postgres 系统用户设置密码。当我在 psql 中更新密码时,它没有抱怨无法更新密码,但是当我尝试使用该密码登录时,它会给我上面的错误。但有趣的是,其他用户也无法使用该密码登录。也许我需要配置 psql 以接受没有密码的用户? - Romulus
@Romulus,问题不在于将日志记录到Postgres Linux/Unix用户中,而在于连接到相同名称的数据库角色。 - Малъ Скрылевъ
4
好的,我明白了。我已经在psql中更改了密码,而不是系统用户的密码。问题是,如果我设置一个密码,它可以正常工作(任何密码都可以),但是如果我尝试将其更改为NULL,则会出现错误:Error: psql: fe_sendauth: no password supplied - Romulus

3
postgres=# ALTER USER postgres WITH PASSWORD '';
NOTICE:  empty string is not a valid password, clearing password
ALTER ROLE
postgres=# 

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