我有一台运行在远程Debian Squeeze服务器上的PostgreSQL服务器。 我想同时使用ident和md5方法与用户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