首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >进阶数据库系列(四):PostgreSQL 访问控制与认证管理

进阶数据库系列(四):PostgreSQL 访问控制与认证管理

作者头像
民工哥
发布于 2023-08-22 05:39:05
发布于 2023-08-22 05:39:05
78800
代码可运行
举报
运行总次数:0
代码可运行

PostgreSql 连接访问控制

概述

PostgreSql 数据库安装完成后,再需要做一些配置,才可以正常访问。一般需要修改 postgresql.confpg_hba.conf 配置文件,有其他特殊需求的,可能还需要修改 pg_ident.conf 配置文件。

配置文件修改
postgresql.conf 文件

数据库集簇安装部署完成后,要更改其中的监听地址,否则默认只监听数据库服务器本地 localhost 地址。另外确保监听的端口号要通畅,不被防火墙或其他网络安全策略所限制,默认端口号 5432。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
listen_addresses = '*'
port = 5866
pg_hba.conf 文件

数据库集簇安装部署完成后,默认只允许本地连接,且连接认证方式均为 trust,生产环境建议更改为 md5 连接认证方式,并根据需求增加允许访问的客户端地址。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# TYPE       DATABASE      USER        ADDRESS      METHOD
 local            all       all                        md5
  host            all       all   127.0.0.1/32         md5
  host            all       all      0.0.0.0/0         md5
  host            all       all        ::1/128         md5
 local    replication       all                        md5
  host    replication       all   127.0.0.1/32         md5
  host    replication       all        ::1/128         md5

TYPE,数据库连接方式,有如下四种

  • local:匹配使用Unix域套接字的连接,如果没有此类型的记录,则不允许使用Unix域套接字连接。
  • host:匹配使用TCP/IP进行的连接,主机记录匹配SSL或非SSL连接,需要配置listen_addresses。
  • hostssl:匹配使用TCP/IP进行的连接,仅限于使用SSL加密进行连接,需要配置ssl参数。
  • hostnossl:匹配通过TCP/IP进行的连接,不使用SSL的连接。

DATABASE:指定哪些数据库可以被连接

  • 匹配的数据库名称,all 指定它匹配所有数据库。
  • 复制(replication)不指定数据库。
  • 多个数据库可以用逗号分隔。

USER:指定哪些用户可以连接

  • 匹配的数据库用户名,all 指定它匹配所有用户。
  • 可以通过用逗号分隔来提供多个用户名。

ADDRESS:指定哪些IP地址可以连接

  • 匹配的客户端计算机地址,all 匹配任何 IP 地址。
  • 0.0.0.0/0 表示所有 IPv4 地址。
  • :: 0/0 表示所有 IPv6 地址。
  • 192.168.100.101/32 允许这个 ip 登录。
  • 192.168.100.0/24 允许 19.168.100.0~192.168.100.255 网段登录数据库

METHOD:客户端认证方式

  • trust:只要知道数据库用户名就不需要密码或ident就能登录,建议不要在生产环境中使用。
  • am-sha-256:密码认证,这是当前提供的方法中最安全的一种,但是旧的客户端库不支持这种方法。
  • md5:是常用的密码认证方式,如果你不使用ident,最好使用md5。密码是以md5形式传送给数据库,较安全,且不需建立同名的操作系统用户。
  • password:以明文密码传送给数据库,建议不要在生产环境中使用。
  • ident:Linux下PostgreSQL默认的local认证方式,凡是能正确登录操作系统用户(注:不是数据库用户)就能使用本用户映射的数据库用户不需密码登录数据库。操作系统名,数据库用户名,数据库名一致。
  • reject:拒绝认证,这对于从组中“过滤掉”某些主机非常有用。

修改完pg_hba.conf文件之后,需要重新加载配置,不用重启数据库:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--系统命令行执行
pg_ctl reload

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--连入数据库执行
select pg_reload_conf();

pg_ident.conf 文件

数据库映射文件,ident 认证方式的扩展,标注操作系统用户与数据库用户的映射关系,配合pg_hba.conf 使用。允许数据库服务器上指定的操作系统用户,使用指定的数据库用户,免密连入数据库。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pg_ident.conf 文件
# MAPNAME    SYSTEM-USERNAME    PG-USERNAME
      ss                aaa            test
      ss                syd             syd
      
pg_hba.conf 文件
# TYPE       DATABASE      USER        ADDRESS      METHOD
 local            all       all                      ident map=ss
  host            all       all   127.0.0.1/32         md5
  host            all       all      0.0.0.0/0         md5
  host            all       all        ::1/128         md5
 local    replication       all                        md5
  host    replication       all   127.0.0.1/32         md5
  host    replication       all        ::1/128         md5
  • MAPNAME:映射名,自定义配置在 pg_hba.conf 文件中。
  • SYSTEM-USERNAME:系统用户名。
  • PG-USERNAME :数据库用户名。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--aaa 操作系统用户,使用 test 数据库用户,免密连入数据库。
[root@dj ~]# su - aaa
[aaa@dj ~]$ psql -U test
psql (12.4)
Type "help" for help.
test=> select user;
user
------
test
(1 row)

--syd 操作系统用户,使用 syd 数据库用户,免密连入数据库
[root@dj ~]# su - syd
[syd@dj ~]$ psql -U syd
psql (12.4)
Type "help" for help.
syd=> select user;
user
------
syd
(1 row)

PostgreSql 认证方式 Peer 认证

Peer 认证方法通过从内核获得客户端的操作系统用户名并把它用作被允许的数据库用户名(和可选的用户名映射)来工作。这种方法只在本地连接上支持。

Peer 认证只在提供getpeereid()函数、SO_PEERCRED套接字参数或相似机制的操作系统上可用。这些 OS 当前包括Linux、大部分的BSD包括OS X以及Solaris

配置示例
数据库服务器配置参数文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pg_ident.conf 文件
# MAPNAME    SYSTEM-USERNAME    PG-USERNAME
      ss                aaa            test
      ss                syd             syd
      
pg_hba.conf 文件
# TYPE       DATABASE      USER        ADDRESS      METHOD
 local            all       all                        peer map=ss
  host            all       all   127.0.0.1/32         md5
  host            all       all      0.0.0.0/0         md5
  host            all       all        ::1/128         md5
 local    replication       all                        md5
  host    replication       all   127.0.0.1/32         md5
  host    replication       all        ::1/128         md5

重新加载即可生效
pg_ctl reload
  • MAPNAME:映射名,自定义配置在 pg_hba.conf 文件中。
  • SYSTEM-USERNAME:系统用户名。
  • PG-USERNAME :数据库用户名。
数据库服务器本地测试连接
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--aaa 操作系统用户,使用 test 数据库用户,免密连入数据库。
[root@dj ~]# su - aaa
[aaa@dj ~]$ psql -U test
psql (12.4)
Type "help" for help.
test=> select user;
user
------
test
(1 row)

--syd 操作系统用户,使用 syd 数据库用户,免密连入数据库
[root@dj ~]# su - syd
[syd@dj ~]$ psql -U syd
psql (12.4)
Type "help" for help.
syd=> select user;
user
------
syd
(1 row)

PostgreSql 认证方式 Idnet 认证

ident 认证方法通过从一个 ident 服务器获得客户端的操作系统用户名并且用它作为被允许的数据库用户名(和可选的用户名映射)来工作。它只在 TCP/IP 连接上支持。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
当为一个本地(非 TCP/IP)连接指定 ident 时,将实际使用 peer 认证。 

“Identification Protocol(标识协议)”在 RFC 1413 中描述。实际上每个类 Unix 操作系统都带着一个默认监听 TCP 113 端口的 ident 服务器。ident 服务器的基本功能是回答类似这样的问题:“哪个用户从你的端口X发起了连接并且连到了我的端口Y?” 。

因为当一个物理连接被建立后,PostgreSQL既知道X也知道Y, 所以它可以询问尝试连接的客户端主机上的 ident 服务器并且在理论上可以判断任意给定连接的操作系统用户。简单来说,ident 服务能够告知 socket 被连接端当前操作系统用户信息。

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

配置示例
数据库服务器配置参数文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pg_ident.conf 文件
# MAPNAME    SYSTEM-USERNAME    PG-USERNAME
      ss                aaa            test
      ss                syd             syd
      
pg_hba.conf 文件
# TYPE       DATABASE      USER        ADDRESS      METHOD
 local            all       all                        md5
  host            all       all   127.0.0.1/32         md5
  host            all       all      0.0.0.0/0         idnet map=ss
  host            all       all        ::1/128         md5
 local    replication       all                        md5
  host    replication       all   127.0.0.1/32         md5
  host    replication       all        ::1/128         md5

重新加载即可生效
pg_ctl reload
  • MAPNAME:映射名,自定义配置在 pg_hba.conf 文件中。
  • SYSTEM-USERNAME:系统用户名。
  • PG-USERNAME :数据库用户名。
客户端配置并测试连接

客户端服务器要装有 PostgreSql 数据库客户端,可通过命令行方式连接远程服务器端的数据库。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--linux 客户端安装 oidentd,并启动该服务
yum -y install epel-release
yum clean all && yum makecache
yum install -y oidentd
systemctl start oidentd.service
systemctl status oidentd.service

--开放防火墙端口或关闭防火墙
firewall-cmd --add-port=113/tcp
firewall-cmd --permanent --add-port=113/tcp
firewall-cmd --reload
firewall-cmd --list-ports  | grep 113

systemctl stop firewalld.service
systemctl status firewalld.service
systemctl disable firewalld.service
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--aaa 操作系统用户,使用 test 数据库用户,免密连入数据库。
[root@dj ~]# su - aaa
[aaa@dj ~]$ psql -U test -h 192.168.100.10 -p 5432
psql (12.4)
Type "help" for help.
test=> select user;
user
------
test
(1 row)

--syd 操作系统用户,使用 syd 数据库用户,免密连入数据库
[root@dj ~]# su - syd
[syd@dj ~]$ psql -U syd -h 192.168.100.10 -p 5432
psql (12.4)
Type "help" for help.
syd=> select user;
user
------
syd
(1 row)

参考文章:https://blog.csdn.net/songyundong1993/ category_11329151.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 民工哥技术之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PostgreSQL本地/远程登陆配置
关于PostgreSQL与PostGIS使用,可参看《PostgreSQL与PostGIS的基础入门》。本篇文章主要介绍如何实现本地与远程登陆,并对其认证方式进行总结。
create17
2019/04/17
14.7K0
PostgreSQL本地/远程登陆配置
PostgreSQL pg_hba.conf 文件简析
HBA 的意思是 host-based authentication:基于主机的认证。在initdb初始化数据目录的时候,它会安装一个缺省的文件。
数据和云
2021/07/30
1.8K0
连接到PostgreSQL数据库
PG默认只接受本地的访问,这个规则是由参数listen_addresses控制的
姚远OracleACE
2023/09/06
6930
连接到PostgreSQL数据库
PostgreSQL远程连接配置管理/账号密码分配 转
说明:这个是由于没有配置远程访问且认证方式没改造成的,只需要更改使用账号密码认证即可。
双面人
2019/05/21
2.9K0
数据库PostrageSQL-用户名映射
当使用像 Ident 或者 GSSAPI 之类的外部认证系统时,发起连接的操作系统用户名可能不同于要被使用的数据库用户(角色)。在这种情况下,一个用户名映射可被用来把操作系统用户名映射到数据库用户。要使用用户名映射,在pg_hba.conf的选项域指定map=map-name。
cwl_java
2020/11/24
9060
从零开始学PostgreSQL (二): 配置文件
PostgreSQL 使用三个主要的配置文件来控制服务器的行为、网络访问和用户映射。下面是对这三个文件的详细介绍:
DBA实战
2024/09/06
8250
从零开始学PostgreSQL (二): 配置文件
史上最全PostgreSQL体系结构
墨墨导读:本文主要从日志文件、参数文件、控制文件、数据文件、redo日志(WAL)、后台进程这六个方面来讨论PostgreSQL的结构。
数据和云
2019/07/22
4.2K0
史上最全PostgreSQL体系结构
如何在 CentOS 8 上安装 Postgresql
PostgreSQL 或者 Postgres 是一个开源的,多用途的关系型数据库管理系统。它有很多高级特性,可以允许你构建容错的环境或者复杂的应用。
雪梦科技
2020/05/11
7.1K0
如何在 CentOS 8 上安装 Postgresql
postgreSQL + Drupal 安装
最近在做毕业论文,需要用到Linux(Fedora)下的postgreSQL+Drupal构建。就这么边学边做,碰到许多小问题,折腾了好几天,终于把网站架起来。
全栈程序员站长
2022/09/09
1.8K0
PostgreSQL入门
这时相当于系统用户postgres以同名数据库用户的身份,登录数据库,这是不用输入密码的。如果一切正常,系统提示符会变为"postgres=#",表示这时已经进入了数据库控制台。以下的命令都在控制台内完成。
老马
2019/05/25
2K0
客户端认证-认证方式
信任认证 trust 这个方法允许任何可以与OushuDB 数据库服务器连接的用户以他们期望的任意OushuDB 数据库用户身 份进行连接,而不需要口令或任何其他认证。 trust认证对于单用户工作站的本地连接是非常合适和方便的,它只适合 TCP/IP 连接,只有在你信任那 些trust 行上所有机器中的所有用户的时候才适合,一般很少使用trust作为任何除来自localhost (127.0.0.1) 以外的 TCP/IP 连接的认证方式,建议不要在生产环境中使用。 ident认证 ident 认证方法是通过从一个ident服务器获取客户端的操作系统用户名,然后列出允许的相对应名称的 映射文件确定允许的数据库用户名。这个用户映射文件为pg_ident.conf,记录着与操作系统用户匹配的 数据库用户,如果某操作系统用户在本文件中没有映射用户,则默认的映射数据库用户与操作系统用户 同名。比如,服务器上有名为user1的操作系统用户,同时数据库上也有同名的数据库用户,user1登录 操作系统后可以直接输入psql,以user1数据库用户身份登录数据库且不需密码。
用户7454708
2023/05/08
1.5K0
PostgreSQL入门和高维向量索引
wget https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-ppc64le/pgdg-centos96-9.6-3.noarch.rpm yum install pgdg-centos96-9.6-3.noarch.rpm
黄规速
2022/04/17
1.9K0
数据库PostrageSQL-客户端认证
当一个客户端应用连接一个数据库服务器时,它将指定以哪个PostgreSQL 数据库用户名连接,就像我们以一个特定用户登录一台 Unix 计算机一样。在 SQL 环境中,活动的数据库用户名决定对数据库对象的访问权限 — 详见Chapter 21。因此,它本质上是哪些数据库用户可以连接。
cwl_java
2020/11/16
1.9K0
Linux 上安装 PostgreSQL
可以参考:https://www.cnblogs.com/freeweb/p/8006639.html#top
别先生
2020/09/01
6.7K0
Linux 上安装 PostgreSQL
进阶数据库系列(十五):PostgreSQL 主从同步原理与实践
在正式介绍 PostgreSQL 主从同步复制 之前,我们先了解一下 PostgreSQL 的预写日志机制(WAL)。
民工哥
2023/08/22
6.1K0
进阶数据库系列(十五):PostgreSQL 主从同步原理与实践
PostgreSQL体系结构
原文:https://www.enmotech.com/web/detail/1/764/1.html
数据和云01
2019/07/31
1.1K0
PostgreSQL体系结构
从零开始学PostgreSQL (一):Centos8 RPM安装PostgreSQL16
DBA实战
2024/09/06
5030
从零开始学PostgreSQL (一):Centos8 RPM安装PostgreSQL16
CentOS7 部署 PostgreSQL
陳斯托洛夫斯記
2024/08/07
1580
如何在 Ubuntu 20.04 上安装 PostgreSQL
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-postgresql-on-ubuntu-20-04/
雪梦科技
2020/05/25
12.8K0
如何在 Ubuntu 20.04 上安装 PostgreSQL
美女DBA带你了解PostgreSQL用户及角色
墨墨导读:本文为大家讲述了PostgreSQL数据库的用户及角色,希望对刚接触PostgreSQL数据库的朋友们有帮助。
数据和云
2019/07/30
1.4K0
推荐阅读
相关推荐
PostgreSQL本地/远程登陆配置
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档