热门标签 | 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文件中没有与客户端连接请求匹配的认证记录,该客户端连接请求也会被拒绝。


推荐阅读
  • 开发笔记:新手DVWACSRF
    开发笔记:新手DVWACSRF ... [详细]
  • Linux环境下PostgreSQL的安装、配置及日常管理
    本文详细介绍了在Linux环境下安装、配置PostgreSQL数据库的过程,包括环境准备、安装步骤、配置数据库访问以及日常服务管理等方面的内容。适合初学者和有一定经验的数据库管理员参考。 ... [详细]
  • 在安装 SQL Server 时,选择混合验证模式可以提供更高的灵活性和管理便利性。如果您已经安装了 SQL Server 并使用单一的 Windows 身份验证模式,可以通过以下步骤将其更改为混合验证模式。 ... [详细]
  • UE4 中 Decal 贴花在静态光照下的渲染问题及解决方案
    本文探讨了 UE4 中 Decal 贴花在静态光照条件下无法正确渲染的问题,分析了其原因,并提供了针对不同平台(PC 和移动设备)的有效解决策略。特别关注了半透明材质贴花的特殊处理方法。 ... [详细]
  • 本文介绍了如何在 Ubuntu 18.10 Cosmic 停止官方支持后,通过更换软件源来解决 `apt update` 失败的问题。 ... [详细]
  • 部署新的ASP.NET Web应用程序构建(主要涉及DLL文件更改)后,服务器上的CPU使用率每几秒就会飙升至100%,问题似乎源自lsass.exe进程。这一现象与应用程序部署之间是否存在直接关联? ... [详细]
  • 本文详细介绍了 SVN 中的 switch 命令及其使用方法,包括如何切换工作副本到新的 URL 和如何处理版本库迁移等情况。 ... [详细]
  • 在Ubuntu 14.04 (Desktop AMD64) 上安装与配置ROS Indigo
    本文档详细介绍了如何在Ubuntu 14.04 (Desktop AMD64) 系统上安装和配置ROS Indigo。包括设置软件源、安装ROS核心组件、初始化rosdep以及创建ROS工作空间等步骤。 ... [详细]
  • Java基础概念与核心特性解析
    本文深入探讨了Java编程语言的基本特点,包括其简洁性、面向对象设计、跨平台能力以及多线程支持等关键特性。此外,文章还详细分析了JVM、JDK和JRE之间的区别,并讨论了字节码的概念及其优势。 ... [详细]
  • 探讨如何在Rust的Result::map中更有效地使用模式匹配,以减少冗余并提高代码可读性。 ... [详细]
  • APP数据包捕获挑战
    本文探讨了在使用Burp Suite捕获移动应用数据包时遇到的两大难题,尤其是SSL Pinning安全机制的影响,并提供了一种解决方案。 ... [详细]
  • 本文通过一个具体的用户管理项目,详细介绍如何使用Spring MVC框架进行开发。从用户实体类的设计到控制器的实现,再到视图层的展示,全面解析Spring MVC的核心功能与实现细节。 ... [详细]
  • 本文探讨了Go语言(Golang)的学习价值及其在Web开发领域的应用潜力,包括其独特的语言特性和为什么它是现代软件开发的理想选择。 ... [详细]
  • 本文介绍了如何在Anaconda3环境中正确安装TensorFlow和Keras框架,解决了默认环境缺乏所需库以及安装过程中常见的网络连接问题。通过创建特定Python版本的环境,并利用国内镜像加速下载,确保安装过程顺利。 ... [详细]
  • 本文探讨了 Rust 编程语言中 'eq()' 方法与 '==' 运算符之间的差异,并通过示例说明了它们在不同类型比较时的行为。 ... [详细]
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社区 版权所有