分类:
2007-08-30 11:26:04
如果声明了 trust (信任)认证模式, PostgreSQL 就假设任何可以联接到服务器的人都可以以任何他声明的数据库用户名(包括超级用户)连接。 当然,在 database 和 user 字段里面的限制仍然适用。 这个方法应该用于那些在联接到服务器已经有足够操作系统层次保护的环境里。
trust 认证对于单用户工作站的本地联接是非常合适和方便的。 通常它本身并不适用于多用户环境的机器。 不过,即使在多用户的机器上,你也可以使用 trust, 只要你利用文件系统权限限制了对服务器的 Unix 域套接字文件的访问。 要做这些限制,你可以设置 参数 unix_socket_permissions (以及可能还有 unix_socket_group),就象 里描述的那样。 或者你可以设置 unix_socket_directory,把Unix 域套接字文件放在一个经过恰当限制的目录里。
设置文件系统权限只能帮助 Unix 套接字联接。它不会限制本地 TCP/IP 联接; 因此,如果你想利用文件系统权限来控制本地安全,那么删除 pg_hba.conf 里的 host ... 127.0.0.1 ... 行,或者把它改为一个非 trust 的认证方法。
trust 认证模式只适合 TCP/IP 连接,只有在你信任那些在 pg_hba.conf 里声明为 trust,允许联接到服务器的行上的所有机器上面的所有用户的时候才是合适的。 很少有理由使用 trust 作为任何除来自localhost(127.0.0.1)以外的 TCP/IP 联接的认证方式。
以口令为基础的认证方法包括 md5,crypt, 和 password。这些方法操作上非常类似,只不过口令通过联接传送的方法不同: 分别是,MD5散列,crypt 加密,明文。 一个限制是,crypt 不能使用加密了存储在 pg_authid 里的口令。
如果你担心口令被窃听("sniffing"), 那么 md5 比较合适,只有在你必需支持 7.2 以前的老的客户端的时候, 才需要选 crypt。如果我们在开放的互联网上使用, 应该尽可能避免使用 password(除非你在联接上使用了 和 等管理,也就是说, CREATE USER foo WITH PASSWORD 'secret';。缺省时,如果没有明确地设置口令,存储的口令是空并且该用户的口令认证总会失败。
要限制允许访问某数据库的用户集, 可以在 pg_hba.conf 中的 user 字段列出这些用户,就像前面的小节解释的那样。