热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

postgreSQL客户端认证

在PostgreSQL数据库中,客户端想建立一个数据库连接,除了要提供正确的数据库用户名和密码,还要通过数据库的认证。如果不能通过数据库的认证,客户端的连接请求将被拒绝。客户端认证是PostgreSQL独有的特性,其它的数据库如Oracle没有这个概念。认证基于客户
在PostgreSQL数据库中,客户端想建立一个数据库连接,除了要提供正确的数据库用户名和密码,还要通过数据库的认证。如果不能通过数据库的认证,客户端的连接请求将被拒绝。客户端认证是PostgreSQL独有的特性,其它的数据库如Oracle没有这个概念。认证基于客户端所在的主机的IP地址、数据库用户名和要连接的数据库名。

通常情况一个客户端必须满足三个条件才能建立数据库连接:(1)提供正确的数据库用户名和密码。(2)通过认证。(3)连接数据库的用户在被连接的数据库上有CONNECT权限。如果客户端的认证方式是trust,则不需要提供数据库用户的密码,只需要提供数据库用户的名称。

4.1 pg_hba.conf文件

    客户端认证的所有的配置信息都存放在文件pg_hba.conf中,该文件通常位于数据库文件所在的目录下。pg_hba.conf是一个普通的文本文件,该文件中每一行都是一条记录,以”#“打头的行被视为注释,将被忽略掉,空白行也会被忽略。每条记录由多个域构成,域之间用空格或制表符分开(Tab)。如果域的值含有空格,可以用引号将域的值引起来。单个记录不能跨行。

    记录有下面的两种格式,一种以local打头,另一种以host打头。以local 打头的记录用来对使用Unix domain socket连接数据库的客户端进行认证。 如果没有pg_hba.conf文件中没有local类型的记录,所有试图通过Unix domain socket连接数据库的请求都将被拒绝。以host打头的记录用来对使用TCP/IP协议连接数据库的客户端进行认证。

(1)local  database user auth-method

(2)host   database user CIDR-address auth-method

database

    表示该条记录匹配数据库名称。如果是all则匹配所有数据库。

User

    表示该条记录匹配的数据库用户名。如果是all则匹配所有的数据库用户。

CIDR-address

    表示该条记录匹配的客户端的IP地址的范围。它由一个标准的点分十进制表示的IP地址和一个CIDR掩码组成。 掩码的长度指明客户端IP地址必须匹配的高二进制位的个数。给定的IP地址的除去掩码长度指定的高二进制位以后剩下的二进制位必须是0。IP地址、符号“/“和CIDR掩码长度之间不能有任何空格。例如,CIDR地址172.20.143.89/32匹配单个主机172.20.143.89,172.20.143.0/24匹配所有IP地址以172.20.143打头的主机,10.6.0.0/16匹配所有以IP地址以10.6打头的主机,0.0.0.0/0匹配任何主机。如果只想匹配单个主机,对于IPV4,CIDR掩码长度应该是32,对于IPV6,CIDR掩码长度应该是128。

auth-method

表示匹配该条记录的连接请求的认证方法。它有四个取值,分别是trust、reject、md5和password。trust表示不需要提供密码就可以让客户端建立连接。reject表示不允许匹配该条记录的客户端建立连接。MD5表示客户端必须提供一个用MD5方法加密的密码。Password表示客户端必须提供一个没有加密的明文密码。

    下面是一些pg_hba.conf文件记录实例:

(1)下面的记录允许本机上的所有客户端通过UNIX domain socket连接数据库而且不需要提供密码

local  all  all  trust

(2)下面的记录允许任何远程机器上的客户端以任何数据库用户访问任何数据库,但是要提供数据库用户的密码

host    all      all  0.0.0.0/0  password

(3)下面的记录拒绝IP地址为192.168.12.10的客户端用PostgreSQL用户访问任何数据库

host  PostgreSQL   all  192.168.12.10/32  reject

4.2 注意事项

    数据库启动时会将pg_hba.conf文件读入到内存中,如果在数据库运行的过程中修改了该文件,可以通过命令pg_ctl reload通知数据库读入新的文件,新的配置文件一般会在一分钟以内生效,也可能要几分钟或更长的时间。

数据库在将pg_hba.conf文件读入到内存中时,不会校验文件中的记录的正确性。如果pg_hba.conf文件中有错误,该错误将在有客户端连接数据库时被检查出来,数据库日志中会有下面的提示信息:

日志:  文件"/home/postgres_bin/database/postgresql.conf"中有句法错误,在第8行末尾的附近。

   

    数据库在收到客户端连接请求,在pg_hba.conf文件寻找与客户端匹配的认证记录时,总是以找到的第一条匹配的认证记录为准,pg_hba.conf文件中排在前面的认证记录比排在后面的认证记录的优先级高。如果pg_hba.conf文件中有两条记录匹配客户端连接请求,第一条记录拒绝客户端连接请求,第二条记录接受客户端连接请求,那么客户端连接请求将被拒绝。如果在pg_hba.conf文件中没有与客户端连接请求匹配的认证记录,该客户端连接请求也会被拒绝。


推荐阅读
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 在Fedora 31上部署PostgreSQL 12
    本文详细介绍如何在Fedora 31操作系统上安装和配置PostgreSQL 12数据库。包括环境准备、安装步骤、配置优化以及安全设置,确保数据库能够稳定运行并提供高效的性能。 ... [详细]
  • 请看|间隔时间_Postgresql 主从复制 ... [详细]
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • 本文介绍了在安装或运行 Python 项目时遇到的 'ModuleNotFoundError: No module named setuptools_rust' 错误,并提供了解决方案。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • 本文介绍如何在Linux Mint系统上搭建Rust开发环境,包括安装IntelliJ IDEA、Rust工具链及必要的插件。通过详细步骤,帮助开发者快速上手。 ... [详细]
  • 华为USG基于源地址的多出口策略路由配置
    网络拓扑如下:组网情况:企业用户主要有技术部(VLAN10)和行政部(VLAN20),通过汇聚交换机连接到USG。企业分别通过两个不同运营商(ISP1和ISP2)连接到 ... [详细]
  • Nature Microbiology: 人类肠道古菌基因组目录
    本研究揭示了人类肠道微生物群落中古细菌的多样性,分析了来自24个国家、农村和城市人群的1,167个非冗余古细菌基因组。研究鉴定了多个新分类群,并探讨了古菌对宿主的适应性及其与社会人口特征的关系。 ... [详细]
  • Python包管理工具pip的使用指南
    本文详细介绍了如何使用pip进行Python包的安装、管理和常见问题的解决方法,特别针对国内用户提供了优化建议。 ... [详细]
  • 本文详细介绍了如何正确配置Java环境变量PATH,以确保JDK安装完成后能够正常运行。文章不仅涵盖了基本的环境变量设置步骤,还提供了针对不同操作系统下的具体操作指南。 ... [详细]
  • 本文将详细介绍通过CAS(Central Authentication Service)实现单点登录的原理和步骤。CAS由耶鲁大学开发,旨在为多应用系统提供统一的身份认证服务。文中不仅涵盖了CAS的基本架构,还提供了具体的配置实例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本更新解释了为何在代码中不推荐使用从整数到浮点数的转换,并提出了更优的替代方案。 ... [详细]
  • 本文介绍了如何在Java中使用org.apache.commons.math3.linear.ArrayRealVector.getEntry()方法,并提供了多个实际应用中的代码示例。 ... [详细]
author-avatar
风云再起2012668
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有