在PostgreSQL中允许同一用户使用两种login方法

我有一台运行在远程Debian Squeeze服务器上的PostgreSQL服务器。 我想同时使用identmd5方法与用户postgreslogin。 前者是debian维护所需要的。 后者用于通过ssh端口转发连接我的本地postgresql客户端。

我的第一个aproach是添加到用户postgress像这样的行:

# TYPE DATABASE USER CIDR-ADDRESS METHOD local all postgres ident local all postgres md5 

这显然不起作用,正式文件解释说:

具有匹配的连接types,客户端地址,请求的数据库和用户名的第一个logging用于执行身份validation。 没有“落后”或“备份”:如果select了一条logging,authentication失败,则不考虑后续logging。 如果没有logging匹配,访问被拒绝。

因为前三列是相同的postgresql将简单地select它遇到的第一个。

我的解决方法是创build一个名为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 

有没有更好的解决scheme,而不创build第二个用户?

由于您通过端口转发进行连接,因此无论如何您的连接都将成为hosttypes连接,并且应该这样configuration。 我假设这个连接是从127.0.0.1/32所以你需要configuration

 # TYPE DATABASE USER CIDR-ADDRESS METHOD local all postgres ident host all postgres 127.0.0.1/32 md5