postgresql访问认证设置

豆豆网   技术应用频道   2007年10月26日  【字号: 收藏本文

内容摘要:postgresql的访问认证配置主要涉及到两个主要的配置文件:postgresql.conf和pg_hba.conf。

  如果你使用了 sameuser 映射,那么假设用户名 是相等的。如果没有声明这个关键字,则在 $PGDATA/pg_ident.conf 文件中找出映射名。如果这个文件里包含一条记录标识着ident提供的用户名 和请求的 PostgreSQL 用户名的映射, 那么联接被接受。

  对于本地联接,只有在系统支持Unix域套接字信任证的情况下 才能使用(目前是 Linux, FreeBSD, NetBSD, 和 BSD/OS)。

  pam

  使用操作系统提供的可插入的认证模块服务 (Pluggable Authentication Modules) (PAM)来认证。

  认证配置(authentication-option)

  这个可选的字段的含义取决与选择的认证方法。

  了解了以上的内容以后,我们可以开始设置自己的访问认证。和mysql一样,postgresql默认安装的访问认证是不安全的,当我第一次安装好我的postgresql以后,我发现只要输入`psql -U pgsql -d template1`就可以不需要任何密码的进入我的数据库,并且使用的是pgsql用户(数据库的最高权限),即使在我使用ALTER USER为我的数据库用户添加了密码以后情况也没有得到改善,经过一番查找,我发现我的pg_hba.conf内容如下:

  local  all  all           trust

  host  all  all  0.0.0.0  0.0.0.0  trust

  这说明无论在本地还是通过tcp/ip,任何人都可以不加任何限制的使用任何他想用的身份访问我的数据库,于是我为所有的访问都使用了md5认证方法,我的pg_hba.conf变为:

  local  all  all           md5

  host  all  all  0.0.0.0  0.0.0.0  md5

  事情似乎得到了解决,任何人想访问我的数据库都需要通过密码这一关,我的数据库安全了。但是当我有一天重新启动计算机的以后发现我的postgresql并没有被正常的启动,在终端前我发现启动到postgresql服务启动脚本时,提示需要输入密码,原来在设置了md5认证方式以后我的pgsql需要密码才能够启动服务,为了不每次启动都跑到终端前去输入一次密码,我的pgsql用户的认证方法必须为trust:

  local  pgsql  all           trust

  local  all   all           md5

  host  all   all  0.0.0.0  0.0.0.0  md5

  在随后的检测中我发现,虽然通过网络得到了保护,但是如果在本地通过Unix域套接字进行连接的话,任何人都还是可以使用`psql -U pgsql -d template1`的方式轻松的进入我的数据库,这样做显而易见不是我想要的结果,现在我需要unix_socket_permissions的协助,当我把这个项设置为0700以后,就只有套接字的所有人,即系统用户pgsql可以使用套接字进行连接,另外如果我的数据库有几个管理员需要最高权限的话,0770也是一个选择,不过暂时只有我一个管理员,所以我选择了0700,现在我的pg_hba.conf改变为:

  local  pgsql  all           trust

  host  all    all  0.0.0.0  0.0.0.0  md5

  结合了unix_socket_permissions以后,现在只有系统用户pgsql可以无任何限制的连接(当然,伟大的root例外),并且我也不用每次启动的时候都跑到终端前去输入一次密码了,而其他人只能通过网络连接,即使登录到了本地计算机上,其他用户也只能使用`psql -U xx -d template1 -h 127.0.0.1`的方式连接,这种连接是受到密码认证的保护的,这一切正是我想要的。

  以上就是我的设置过程,我们还可以使用pam等认证方法实现更加复杂的访问认证,不过那些内容已经不在本文的讨论范围以内了。

责编:豆豆技术应用

正在加载评论...