PostgreSQL 认证方式

一、概述

客户端的身份验证是由配置文件控制的,配置文件为pg_hba.conf,存放位置在数据目录下(show data_directory;)。
在initdb初始化数据目录时,会生成一个默认的pg_hba.conf文件。也可以将该配置文件存放在其他地方。
pg_hba.conf文件的常用格式是一组记录,每行一条。空白行和#注释字符后面的文本都将被忽略。
每条记录指定连接类型、客户端IP地址范围、数据库名称、用户名以及匹配这些参数连接使用的认证方法。
如果没有匹配的记录,访问将被拒绝。
还可以当作黑白名单访问控制文件,可以限制某些IP的机器允许访问数据库。

pg_hba.conf 文件示例:

cat pg_hba.conf
# TYPE  DATABASE        USER            ADDRESS                METHOD# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             0/0                     md5
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust## ip/数值参数说明
ip/32:表示只允许该ip地址访问,如:192.168.1.1
host    all       all         192.168.1.1/32      md5ip/24:表示允许一个ip段之间的地址访问,如:192.168.1.1~192.168.1.255
host    all       all         192.168.1.0/24      md5ip/16:表示允许两个ip段之间的地址访问,如:192.168.1.1~192.168.255.255
host    all       all         192.168.0.0/16      md5ip/8:表示允许所有ip段之间的地址访问,如:192.1.1.1~192.255.255.255
host    all       all         192.0.0.0/8         md5ip/0:表示允许所有ip地址访问
host    all       all         0.0.0.0/0           md5

二、认证方式

2.1.trust

无条件的允许连接。
这种方法允许任何可以与PostgreSQL服务器连接的用户以任意PostgreSQL数据库用户身份登入,而不需要口令或者其他认证。
此方式一般与UNIX域套接字的连接认证组合使用,对于单用户的本地连接是非常安全和方便的。
为了防止系统其他普通用户连接到数据库,可以设置套接字文件(/tmp/.s.PGSQL.5432)的权限限制访问。
可以设置unix_socket_directories和unix_socket_permissions参数(重启生效)或操作系统层面设置 chmod 770 .s.PGSQL.5432。

## 配置示例
cat pg_hba.conf
# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             0/0                     trust## 使更改生效
pg_ctl reload## 验证
[postgres@postgresql ~]$ psql 
psql (15.4)
Type "help" for help.postgres=# [postgres@postgresql ~]$ psql -h 192.168.80.239 -p 5432 postgres postgres
psql (15.4)
Type "help" for help.postgres=# 

2.2.md5

连接时需要提供口令进行验证,口令以md5方式加密,此方式安全性较高。

## 配置示例
cat pg_hba.conf
# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             0/0                     md5## 使更改生效
pg_ctl reload## 验证
[postgres@postgresql ~]$ psql 
Password for user postgres: 
[postgres@postgresql ~]$ psql -h 192.168.80.239 -p 5432 postgres postgres
Password for user postgres:

2.3.password

连接时需要提供口令进行验证,口令以明文的形式在网络上传输,存在一定的安全隐患,不建议使用。

## 配置示例
cat pg_hba.conf
# "local" is for Unix domain socket connections only
local   all             all                                     password
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             0/0                     password## 使更改生效
pg_ctl reload## 验证
[postgres@postgresql ~]$ psql 
Password for user postgres:
[postgres@postgresql ~]$ psql -h 192.168.80.239 -p 5432 postgres postgres
Password for user postgres:

2.4.reject

无条件的拒绝连接。
可以阻止一个特定的主机连接,而允许其他主机连接数据库,相当于设置了访问黑名单。

## 配置示例
cat pg_hba.conf
# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             192.168.10.132          reject## 使更改生效
pg_ctl reload## 验证
会出现类似的错误现象:FATAL: pg hba.conf rejects connection for host "192.168.10.132",user "postgres", database "postgres", no encryption

2.5.ident

ident认证方式是通过联系客户端的ident服务器获取客户端操作系统的用户名,并且检查它是否匹配被请求的数据库用户名。
ident认证只能在TCP/IP连接上使用。当为本地连接指定这种认证方式时,将用peer认证来代替。
服务器为了确定接收到的连接请求确实是客户端机器上的某个用户发起的,而不是这台机器上其他用户发起的假冒请求,会向客户端机器上的ident服务发起请求,让ident服务查看此TCP连接是否是该用户发起的,如果不是,则认证失败。
如果客户端通过本地连接连接到服务器,因为客户端与服务器在同一台机器上,数据库服务器可以直接检查客户端用户的操作系统用户身份,就不需要向ident服务发送请求进行判断了。

实际上每个类 Unix 操作系统都带着一个默认监听 TCP 113 端口的 ident 服务器。这个过程的缺点是它依赖于客户端的完整性:如果客户端机器不可信或者被攻破,攻击者可能在 113 端口上运行任何程序并且返回他们选择的任何用户。因此这种认证方法只适用于封闭的网络,这样的网络中的每台客户端机器都处于严密的控制下并且数据库和操作系统管理员操作时可以方便地联系。换句话说,你必须信任运行 ident 服务器的机器。

此验证方式需要配合pg_ident.conf使用。
(远程操作系统的当前用户名和数据库的用户名一致时,可以直接使用此用户名登录而不需要密码。)

## 安装oidentd服务
yum install -y oidentd
或
rpm -ivh oidentd-2.0.8-20.el7.x86_64.rpm ## 开启oidentd服务
systemctl start oidentd.service
systemctl status oidentd.service
systemctl enable oidentd.servicess -tlnp | grep 113
LISTEN     0      128         *:113         *:*           users:(("oidentd",pid=19188,fd=4))## 配置示例
cat pg_hba.conf
# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             0.0.0.0/0               ident map=cscat pg_ident.conf
# MAPNAME       SYSTEM-USERNAME         PG-USERNAME
cs              postgres                postgres
cs              admin                   test## 使更改生效
pg_ctl reload## 验证
[root@postgresql tmp]# su - postgres
[postgres@postgresql ~]$ psql -U postgres -h 192.168.80.239 -p 5432
psql (15.4)
Type "help" for help.postgres=# select user;user   
----------postgres
(1 row)[root@postgresql ~]# su - admin
[admin@postgresql ~]$ psql -U test -h 192.168.80.239 -p 5432 postgres
psql (15.4)
Type "help" for help.postgres=> select user;user 
------test
(1 row)

2.6.peer

从操作系统获得客户端的操作系统用户,并且检查它是否匹配被请求的数据库用户名,这只对本地连接可用。
数据库端允许客户端上的特定操作系统用户连接到数据库。
这种认证方式的使用场景如下:客户端是主机上某个操作系统用户,已经通过了操作系统的身份认证,是数据库服务器可以信任的用户,不需要在数据库层面再次检测其身份。

## 配置示例
cat pg_hba.conf
# "local" is for Unix domain socket connections only
local   all             all                                     peer map=cs
# IPv4 local connections:
host    all             all             127.0.0.1/32            trustcat pg_ident.conf
# MAPNAME       SYSTEM-USERNAME         PG-USERNAME
cs              postgres                postgres
cs              admin                   test## 使更改生效
pg_ctl reload## 验证
[root@postgresql tmp]# su - admin
[admin@postgresql ~]$ psql -U test postgres
psql (15.4)
Type "help" for help.postgres=> select user;user 
------test
(1 row)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/120209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp:谷歌地图,实现地图展示,搜索功能,H5导航

页面展示 APP H5 谷歌地图功能记录,谷歌key申请相对复杂一些,主要需要一些国外的身份信息。 1、申请谷歌key 以下是申请谷歌地图 API 密钥的流程教程: 登录谷歌开发者控制台:打开浏览器,访问 Google Cloud Platform Console。 1、创建或选择项目:如果你还没有创建项目…

trucksim常见问题

一、Error: Unable to load .vs data from “D:\Users\Public\Documents\TruckSim2019.0 Data\Results\Run_e24aa2… LastRun.vs”.Reason for failure: Invalid character OxFFFFFFB2 in string"" on line 4.Would you like to continue receiving alerts of this t…

【Python机器学习】零基础掌握GaussianProcessRegressor高斯过程

如何更精确地预测未来的股票价格? 股票市场总是充满变数,投资者经常面临着如何更准确地预测股票价格的问题。传统的预测方法或许可以提供一些线索,但它们往往无法捕捉到市场的所有复杂性。 现代技术提供了一种更高级的预测方法:高斯过程回归(Gaussian Process Regressio…

华为云双十一服务器数据中心带宽全动态BGP和静态BGP区别

2023华为云双十一优惠活动中提供多款云服务器选择,需要注意的是:西南-贵阳一和华北-北京一数据中心是静态BGP带宽,其他数据中心配置全动态独享BGP带宽。 静态BGP和全动态BGP带宽有什么区别?全动态BGP网络线路可用性保障更高&…

Nginx内外网代理配置记录

一、背景 客户现场内网服务器不提供外网环境,仅在另一台服务器上提供外网访问权限,所以需要通过网络代理的方式,将内网服务器需要访问的外网请求代理到外网服务器去受理。 二、解决 如此流程需要用到两台服务器,所以对应的也需要…

【分享】7-Zip压缩包的密码可以取消吗?

7-Zip压缩包设置了“密码保护”,后面又不想要了,可以取消吗? 首先,我们要分两种情况来看,是记得密码,但不想每次打开压缩包都要输入密码,所以想取消密码,还是把密码忘记了所以想取消…

搜维尔科技:【应用】配备MTi-3的轻便型ROV,在水下进行地理标记视觉检测

部署潜水员进行水下摄像,不仅难度高而且费用昂贵,需要受过潜水和摄像两方面培训的专业人员来进行。但有些水下作业任务例如拍摄海底管道内部的照片,由于人员无法进入或危险度高的原因,无法由潜水员完成。 如今,俄罗…

stm32通过AT指令与esp8622通信

stm32通过AT指令与esp8622通信 文章目录 stm32通过AT指令与esp8622通信1.tcp通信2.mqtt通信 1.tcp通信 ATCWMODE1 设置为STA模式ATCWJAP_DEF"langtaotech","langtaotechXXX"ATCIPSTA? 查询ipATCIPMUX0 设置单连接ATCIPSTART"TCP","19…

openEuler 22.03 LTS 环境使用 Docker Compose 一键部署 JumpServer (all-in-one 模式)

环境回顾 上一篇文章中,我们讲解了 openEuler 22.03 LTS 安装 Docker CE 和 Dcoker Compose,部署的软件环境版本分别如下: OS 系统:openEuler 22.03 LTS(openEuler-22.03-LTS-x86_64-dvd.iso)Docker Engine:Docker C…

Linux--进程等待

1.什么是进程等待 1.通过系统调用wait/waitid,来对子进程进行进行检测和回收的功能。 2.为什么有进程等待 1.对于每个进程来说,如果子进程终止,父进程没有停止,就会形成僵尸进程,导致内存泄露,为了防止僵尸进程的形成…

【计算机视觉】MoCo v3 讲解

MoCo v3 论文信息 标题:An Empirical Study of Training Self-Supervised Vision Transformers 作者:Xinlei Chen, Saining Xie, Kaiming He 期刊:ICCV 2021 发布时间与更新时间:2021.04.05 2021.04.08 2021.05.05 2021.08.16 主题:计算机视觉、对比学习、MoCo arXiv:[21…

GIT在window是 配置SSHKEY

1、打开你得命令行工具,输入: cd ~/.ssh2、生成密钥 #设置自己的邮箱,随意设置 $ ssh-keygen -t rsa -C "wqzbxh163.com"#输入保存密钥的文件名字 Enter file in which to save the key (/c/Users/dahai/.ssh/id_rsa): wqzbxh剩下…

SpringBoot集成Redis Cluster集群(附带Linux部署Redis Cluster高可用集群)

目录 一、前言二、集成配置2.1、POM2.2、添加配置文件application.yml2.3、编写配置文件2.4、编写启动类2.5、编写测试类测试是否连接成功 一、前言 这里会使用到spring-boot-starter-data-redis包,spring boot 2的spring-boot-starter-data-redis中,默…

域名系统 DNS

DNS 概述 域名系统 DNS(Domain Name System)是因特网使用的命名系统,用来把便于人们使用的机器名字转换成为 IP 地址。域名系统其实就是名字系统。为什么不叫“名字”而叫“域名”呢?这是因为在这种因特网的命名系统中使用了许多的“域(domain)”&#x…

2023年最受欢迎的11个UI设计师网站,助你成为行业翘楚

作为一名优秀的UI设计师,快速寻找灵感,保持审美在线,了解行业动态绝对是一项职业必备技能。 今天小编为各位小伙伴整理了一些UI设计师必看的绝佳网站。你可以从这些网站中了解行业最新动态,寻找创意灵感、学习优秀作品&#xff0…

ModbusTCP 转 Profinet 主站网关控制汇川伺服驱动器配置案例

ModbusTCP Client 通过 ModbusTCP 控制 Profinet 接口设备,Profinet 接口设备接入 DCS/工控机等 兴达易控ModbusTCP转Profinet主站网关(XD-ETHPNM20)采用数据映射方式进行工作。 使用设备:兴达易控ModbusTCP 转 Profinet 主站网关…

DeOldify 接口化改造 集成 Flask

类似的图片修复项目 GFPGAN 的改造见我另一篇文 https://blog.csdn.net/weixin_43074462/article/details/132497146 DeOldify 是一款开源软件,用于给黑白照片或视频上色,效果还不错。 安装部署教程请参考别的文章,本文基于你给项目跑通&…

【MySQL索引与优化篇】索引的数据结构

文章目录 1. 概述2. 常见索引结构2.1 聚簇索引2.2 二级索引(辅助索引、非聚簇索引)2.3 联合索引 3. InnoDB的B树索引的注意事项3.1 根页面位置万年不动3.2 内节点中目录项记录的唯一性 4. MyISAM中的索引方案5. InnoDB和MyISAM对比6. 小结7. 补充:MySQL数据结构的合…

JavaWeb——关于servlet种mapping地址映射的一些问题

6、Servlet 6.4、Mapping问题 一个Servlet可以指定一个映射路径 <servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern> </servlet-mapping>一个Servlet可以指定多个映射路径 <servlet-mapping>&…

JAVA-编程基础-11-04-java IO 字符流

Lison <dreamlison163.com>, v1.0.0, 2023.05.07 JAVA-编程基础-11-04-java IO 字符流 文章目录 JAVA-编程基础-11-04-java IO 字符流字符流Reader 和 Writer字符输入流&#xff08;Reader&#xff09;**FileReader构造方法****FileReader读取字符数据** 字符输出流&am…