chapter 4. 用户认证
table of contents
4.1. pg_hba.conf 文件
4.2. 认证方法
4.2.1. 信任认证
4.2.2. 口令认证
4.2.3. kerberos 认证
4.2.4. 基于 ident 的认证
4.2.5. pam 认证
4.3. 认证问题
当一个客户端应用与数据库服务器进行联接时,它声明 它将以哪个 postgresql 用户的名称进行联接, 就象我们登录一台 unix 计算机 一样.在 sql 环境里,活跃的数据库用户名决定数据库对象的各种访问 权限--参阅chapter 6获取更多信息.因此, 实际上我们要限制的是用户可以联接的数据库.
认证 是数据库服务器建立客户端应用的标识, 然后通过一些手段判断是否允许此客户端应用(或者运行这个客户端应用的 用户)与它所要求的用户名进行联接的过程.
postgresql 提供多种不同的客户端认证方式.认证某个特定客户端联接所使用的方法可以通过基于 (客户端)的主机地址,数据库和用户的方式进行选择; 一些认证方法还允许你通过用户名进行限制.
postgresql 用户名在逻辑上是和 服务器运行的操作系统用户名相互独立的. 如果某个服务器的所有用户在那台服务器机器上也有帐号, 那么给数据库用户赋与操作系统用户名是有意义的.不过, 一个接收远程访问的服务器很有可能有许多没有本地帐号的用户, 因而在这种情况下数据库用户和操作系统用户名之间不必有任何联系.
4.1. pg_hba.conf 文件
客户端认证是由数据目录里的文件pg_hba.conf 控制的,比如, /usr/local/pgsql/data/pg_hba.conf. (hba 的意思是 host-based authentication:基于主机的认证.) 在initdb初始化数据目录的时候,它会 安装一个缺省的文件.
文件 pg_hba.conf 的常用格式是一套记录, 每行一条。空白行行被忽略,井号( "#" )开头的注释 也被忽略。一条记录是由若干用空格和/或 tab 分隔的字段组成。 如果字段用引号包围,那么它可以包含空白.记录不能夸行存在.
每条记录声明一种联接类型,一个客户端 ip 地址范围 (如果和联接类型相关的话),一个数据库名,一个用户名字, 以及对匹配这些参数的联接使用的认证方法. 匹配联接类型,客户端地址和联接企图请求的数据库名和用户名的第一条记录 将用于执行认证.这个处理过程没有"跨越"或者 "回头"的说法∶如果选择了一条记录而且认证失败,那么 将不考虑后面的记录.如果没有匹配的记录,那么访问将被拒绝.
每条记录可以下面三种格式之一
local database user authentication-method [authentication-option]
host database user ip-address ip-mask authentication-method [authentication-option]
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器