IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    pg_hba.conf文件的策略顺序

    Jimmy He发表于 2022-02-11 09:00:27
    love 0

    原来一直以为这个文件中,每一行的顺序是没有区别的,但是最近的一个需求,研究时发现,原来这个文件对登录的会话,是从上往下依次判断的:

    具体的规则是:

    1. 登录的会话,会顺着pg_hba.conf的策略一条一条往下走。
    2. 如果遇到匹配到的规则,那么做成判断,是信任,还是拒绝,还是验证密码。后续就不往下走继续判断规则了。
    3. 如果某一条规则不符合,没匹配成功,就继续往下走,继续做判断,直到所有的规则都判断完毕。

    因此,如果我有一个用于备份的用户,叫anybackup(爱数备份软件),由于权限设置的比较大,需要保证只能在数据库本机登录(利用爱数在数据库本机的agent,登录数据库),且要禁止该用户,从别的主机登录。
    我们可以这样写我们的pg_hba.conf文件:

    # TYPE  DATABASE      USER           ADDRESS        METHOD
    local   all           all                           trust
    host    all           anybackup      10.0.0.0/8     reject
    host    all           anybackup      127.0.0.1/32   trust
    host    replication   repuser        10.0.0.0/8     md5
    host    all           all            10.0.0.0/8     md5

    这表示:
    (1)如果是以本地socket方式连接数据库,则全部信任,无需密码。
    (2)如果是通过tcpip(不管是ssl还是非ssl)登录,且是非爱数的anybackup用户,比如正常的业务用户,那么第一行,不是socket登录,不符合,继续往下走;第二行,不是anyback用户,不符合,继续往下走;第三行,也不是anybackup用户,不符合,继续往下走;第四行,不是repuser主从复制用户,不符合,继续往下走;第五行,符合,可以用密码登录。
    (3)如果是通过tcpip(不管是ssl还是非ssl)登录,且数据库用户是anybackup,在数据库本机登录,那么第一行,不符合,继续往下走;第二行,匹配到了用户,但是ip地址不符合,继续往下走;第三行,全部符合,登录成功,完成,不往下继续判断了。
    (4)如果是通过tcpip(不管是ssl还是非ssl)登录,且数据库用户是anybackup,在远程登录,那么第一行不符合,往下走,第二行符合,直接拒绝连接,已经匹配到规则,所以不往下继续判断。

    注意我们这边reject的策略,不能放到最后一行。如果我们配置成这样:

    # TYPE  DATABASE      USER           ADDRESS        METHOD
    local   all           all                           trust
    host    all           anybackup      127.0.0.1/32   trust
    host    replication   repuser        10.0.0.0/8     md5
    host    all           all            10.0.0.0/8     md5
    host    all           anybackup      10.0.0.0/8     reject

    那么,我们远程登录的anybackup用户,就会符合第四行的策略,不再进行第五行的判断。



沪ICP备19023445号-2号
友情链接