设为首页 加入收藏

TOP

关于postgresql的安装与实用(四)
2014-11-24 00:04:36 来源: 作者: 【 】 浏览:79
Tags:关于 postgresql 安装 实用
s # with the same name as their database user name) except for administrators # and members of role "support", who can connect to all databases. The file # $PGDATA/admins contains a list of names of administrators. Passwords # are required in all cases. # # TYPE DATABASE USER ADDRESS METHOD local sameuser all md5 local all @admins md5 local all +support md5 # The last two lines above can be combined into a single line: local all @admins,+support md5 # The database column can also use lists and file names: local db1,db2,@demodbs all md5

用户名映射

当我们用Ident或者GSSAPI这些系统外部的认证方法,发起连接的的操作系统的用户名可能和它需要连接数据库用户名不一致,在这种情况下,操作系统的用户名和数据库的用户名需要做一个映射,用map=map-name这个选项在pg_hba.conf文件中进行声明。对于外部用户名这个选项支持所有的认证方法。由于不同的连接可能需要不同的映射,所以映射的名字需要在pg_hba.conf文件中用map-name参数进行声明,表示映射到每个特定的连接。

用户名的映射在ident映射文件中进行定义,缺省的名字叫做pg_ident.conf,存储在集群的数据目录。(然而这个映射文件也可以放在其他地方,请查看ident_file配置参数。)这个ident映射文件中的行一般是如下形式:

map-name system-username database-username

对于注释和空白的处理和pg_hba.conf一样。map-name是一个任意的名称,在pg_hba.conf中被提到的映射它将被用到。其他两个字段声明一个操作系统的用户名和一个匹配的数据库用户名。同样的映射名称可以在一个单个的映射中声明多个用户名。

如果system-username字段用/开头,那么这个字段其余的部分将是一个正则表达式。(请参阅Section 9.7.3.1获取更详细的PostgreSQL正则表达式的语法)如果system-username字段用/开头,那么这个字段其余的部分将是一个正则表达式。(请参阅Section 9.7.3.1获取更详细的PostgreSQL正则表达式的语法)正则表达式可以捕获单个的字符或者用括号括起来的子表达式,然后可以在database-username这个字段中用\1(反斜杠后面加数字1)进行引用。进行引用。在单行中允许多个用户名映射,这是一个特别有用的简单的语法替换。例如,这些条目

mymap /^(.*)@mydomain\.com$ \1 mymap /^(.*)@otherdomain\.com$ guest

这将禁止以@mydomain.com域名结尾的系统用户和数据库用户进行连接,但是允许以@otherdomain域名结尾的系统用户用guest用户登录系统。

提示:请记住,在默认情况下,一个正则表达式只是匹配一个字符串的一部分。通常的方法是用^和$符号,上面的例子是强制匹配整个系统用户名。

当主服务器进程(postmaster)收到SIGHUP信号启动的时候pg_ident.conf文件将会被读取。如果你在活跃的系统编辑了这个文件,你将需要发送一个信号(用pg_ctl reload或者kill -HUP命令)让postmaster进程重新读取这个文件。

pg_ident.conf文件能够和在Example 19-1例子中的pg_hba.conf文件共同来工作,请看Example 19-2.在这个例子中,在192.168这个网段,除了操作系统用户名为bryanh,ann或者robert将不允许访问。Unix用户robert只允许访问PostgreSQL的bob用户,其他非robert用户将不能连接bob用户。ann只能够连接PostgreSQL的ann用户,用户bryanh将允许连接PostgreSQL的bryanh和guest1用户。

Example 19-2. An Example pg_ident.conf File

# MAPNAME SYSTEM-USERNAME PG-USERNAME omicron bryanh bryanh omicron ann ann # bob has user name robert on these machines omicron robert bob # bryanh can also connect as guest1 omicron bryanh guest1

Trust认证

当trust认证被声明之后,PostgreSQL允许任何用户都能访问这个服务器上的这个数据库,无论数据库名是什么(甚至是超级用户)。当然,限制数据库和用户的行仍旧会生效。这个方法应当只用于在有操作系统级别保护这个数据库的情况下使用。trust认证方法对于一个单用户工作站中的本地连接是一个很合适和方便的方法。这种方法不适合在多用户系统中使用。然而,如果你用文件系统权限限制了对服务器的Unix-domain socket访问,你也可以用trust认证方式在多用户系统中使用.要实现这些,可以设置unix_socket_permissions(或者unix_socket_group参数)参数来实现,就像在Section 18.3描述的那样。或者你也可以设置一个unix_socket_directory参数,把socket文件存放在在一个适当的限制目录里。

设置文件系统权限仅对Unix-socket连接有效。本地TCP/IP连接不能用文件系统的权限进行限制。因此,如果你用文件系统权限来保证本地连接安全,你应该在pg_hba.conf文件中移除host。。。127.0.0.1.。。这样的行,或者将这行改成不用trust进行认证。

trust认证只适合TCP/IP连接,如果你想允许每一个用户在每一台机器上都能访问,可以在pg_hba.conf文件中指定用trust认证。我们很少有理由使用除了本地连接(127.0.0.1)以外的其他TCP/IP连接使用trust认证。

密码认证

基于密码的认证方式包括md5和password。这些方法操作上非常类似,只不过连接传送的方法不同,password方式是通过明文传输密码,md5方式是通过MD5加密传输密码。

如果你担心口令被窃听("sniffing"), 那么md5方式比较合适。应该避免使用简单的密码。不过,md5方式不支持db_user_namespace特性。如果用SSL加密进行连接,那么password方式将会更加安全(然而基于SSL连接认证将会是一个不错的选择)。

PostgreSQL数据库的密码与操作系统的用户密码无关。每一个数据库用户的面貌都被存储在pg_authid系统表中。可以用SQL命令CREATE USER和ALTER USER命令进

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 4/8/8
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇PostgreSQL代码整体结构(一) 下一篇PostgreSQL 安装问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: