我在远程 Debian Squeeze 服务器上运行着一个 PostgreSQL 服务器。我想用用户登录PostgreSQL 的使用身份和md5方法。前者是维护 Debian 所必需的。后者用于通过 ssh 端口转发连接我的本地 postgresql 客户端。
我的第一个方法是使用用户 postgress 添加行,如下所示:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
local all postgres ident
local all postgres md5
这显然不起作用,官方文档解释道:
第一个具有匹配的连接类型、客户端地址、请求的数据库和用户名的记录用于执行身份验证。没有“失败”或“备份”:如果选择了一条记录并且身份验证失败,则不会考虑后续记录。如果没有匹配的记录,则拒绝访问。
因为前三列相同,所以 postgresql 只会选择它遇到的第一列。
我的解决方法是创建第二个名为 root 的超级用户
CREATE ROLE root LOGIN SUPERUSER CREATEROLE CREATEDB PASSWORD 'newpassword';
并将以下内容放入 pg_hba.conf:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
local all postgres ident
local all root md5
有没有更好的解决方案,无需创建第二个用户?
答案1
由于您是通过端口转发进行连接的,因此您的连接无论如何都将是host
连接类型,并且应按此进行配置。我假设此连接来自,127.0.0.1/32
因此您需要配置
# TYPE DATABASE USER CIDR-ADDRESS METHOD
local all postgres ident
host all postgres 127.0.0.1/32 md5