使用ident认证方式连接postgres数据库

使用ident认证方式连接postgres数据库

    • postgres支持多种用户认证方式
    • 什么是ident服务
    • postgres支持ident认证的原理
    • 实验验证
      • 环境准备
      • 实验设计
      • 数据库端相关配置
      • 客户端连接认证

postgres支持多种用户认证方式

postgres是当前流行的开源关系型数据库,用户认证是数据库系统最外层的安全保护措施,pg在用户认证这部分即支持自身的口令认证(password,md5,scram-sha-256),也支持第三方标准认证(kerberos, ldap, ident)。保证连接认证的安全性和接口的开放性。

本文介绍postgres如何支持ident认证的。

什么是ident服务

详细信息参考:https://linux.die.net/man/8/oidentd

oidentd is a server that implements the TCP/IP standard IDENT user identification protocol as specified in the RFC 1413 document.
oidentd operates by looking up specific TCP connections and returning the user name of the process owning the connection.

认证协议(ident protocol)在RFC1413中的描述:每个类unix的操作系统都带有一个默认监听113端口的身份服务器。身份服务器能够提供本机发起TCP连接进程的用户名信息。

简单来说,ident服务能够告知socket被连接端当前操作系统用户信息。

postgres支持ident认证的原理

数据库端验证客户端连接时操作系统用户是否合法,属于第三方认证范畴。
pg_hba.conf文件中存储用户连接认证的方法,当HBA中采取ident方式认证时,ident字段后存储数据库用户与操纵系统用户的对应关系。预定义的映射为sameuser,表示任何操作系统用户可以以同名数据库用户连接;其他的映射需要手工创建,操作系统用户名与数据库用户的对应关系寻存储在pg_ident.conf配置文件中,格式如下:

# MAPNAME       SYSTEM-USERNAME         PG-USERNAM

MAPNAME是标记映射关系的名称,SYSTEM-USERNAME为操作系统用户信息,PG-USERNAM为PG数据库用户信息,该信息表示哪个操作系统用户被允许以哪个数据库用户的身份进行连接。同一个MAPNAME可以重复用于声明更多的用户映射,操作系统用户与数据库用户之间也是多对多的关系,即同一个操作系统用户可以映射为多个数据库用户,一个数据库用户可以映射为多个操作系统用户。

实验验证

环境准备

# vm26(centos 7) 数据库端,安装pg10数据库
# vm36(centos 7) 客户端,安装psql客户端,且启动oidentd服务,关闭防火墙,防火墙可能会拦截数据库对113端口请求的数据包。
# oidentd安装包在EPEL源中,EPEL源的配置方法参考如下方法:
# 1 安装rpm包:yum -y install epel-release
# 2 更新源:yum clean all && yum makecache
# 参考:https://blog.csdn.net/w670328683/article/details/51673757

实验设计

1. 希望vm36机器操作系统用户bob可以以bob数据库用户登录数据库
2. 希望vm36机器操作系统用户peter可以以peter或bob数据库用户登录数据库

数据库端相关配置

# 1. 数据库创建bob和peter数据库用户,具有登录权限
postgres=# create user bob login password 'love@xian';
CREATE ROLE
postgres=# create user peter login password 'love@xian';
CREATE ROLE
#  2. 配置pg_hba.conf和pg_ident.conf配置文件
#  2.1 pg_hba.conf文件修改如下,数据库用户bob采取ident认证,操作系统用户与数据库用户的对应关系为bob_ident;数据库用户peter 采取ident认证,操作系统用户与数据库用户的对应关系为默认,即数据库用户与操作系统用户相同。
host    all             bob            192.168.56.36/32         ident map=bob_ident
host    all             peter          192.168.56.36/32         ident
# 2.2 pg_ident.conf文件修改如下:
# MAPNAME       SYSTEM-USERNAME         PG-USERNAME
bob_ident   peter     bob 
bob_ident   bob       bob 
# 3. 重启pg数据库

客户端连接认证

# vm36 机器执行如下命令
# 1. 切换址bob操作系统用户,以bob数据库用户名登录
[bob@vm36 ~]$ psql -h 192.168.56.26 -U bob -d postgres -p 5432
psql (9.2.24, server 10rc1)
WARNING: psql version 9.2, server version 10.0.
         Some psql features might not work.
Type "help" for help.

# 2. 切换至peter操作系统用户,以peter数据库用户名登录
[peter@vm36 ~]$ psql -h 192.168.56.26 -U peter -d postgres -p 5432
psql (9.2.24, server 10rc1)
WARNING: psql version 9.2, server version 10.0.
         Some psql features might not work.
Type "help" for help.

# 3. 切换至peter操作系统用户,以bob数据库用户名登录
[peter@vm36 ~]$ psql -h 192.168.56.26 -U bob -d postgres -p 5432
psql (9.2.24, server 10rc1)
WARNING: psql version 9.2, server version 10.0.
         Some psql features might not work.
Type "help" for help.

你可能感兴趣的:(DataBase,postgres,ident,第三方认证)