暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss安全认证

MTL 2022-11-23
1483

openGauss数据库是一款标准的基于客户端/服务端(C/S)模式工作的数据库系统,每一个完整的会话连接都由后台服务进程和客户端进程组成。一个完整的客户端认证过程如图2所示。

5a824351bcebdbd5b8ea0f852a40a0c5.png
图2 openGauss认证详细流程

(1) 客户端依据用户需求配置相关认证信息,这里主要指SSL(Secure Sockets Layer,安全套接层)认证相关信息,建立与服务端之间的连接。

(2) 连接建立完成后,客户端发送访问所需要的连接请求信息给服务端,对请求信息的验证工作都在服务端完成。

(3) 服务端首先需要进行访问源的校验,即依据配置文件对访问的端口号、访问IP地址、允许用户访问范围以及访问数据对象进行校验。

(4) 在完成校验后连同认证方式和必要的信息返回给客户端。

(5) 客户端依据认证方式加密口令并发送认证所需的信息给服务端。

(6) 服务端对收到的认证信息进行认证。认证通过,则启动会话任务与客户端进行通信提供数据库服务。否则拒绝当前连接,并退出会话。

客户端安全认证机制是openGauss数据库的第一层安全保护机制,解决了访问源与数据库服务端间的信任问题。通过这层机制可有效拦截非法用户对数据库进行恶意访问,避免后续的非法操作。

客户端配置信息

01

如上一小节所描述的,安全认证机制首先要解决访问源可信的问题。openGauss通过系统配置将访问方式、访问源IP地址(客户端地址)以及认证方法存放在服务端的配置文件中。与这些信息同时存放的还包括数据库名、用户名。这些信息会组成一条认证记录,存放在配置文件(Host-Based Authentication File,HBA文件)中。HBA文件记录的格式可为如下四种格式中的一种:

local DATABASE USER METHOD [OPTIONS]
host DATABASE USER ADDRESS METHOD [OPTIONS]
hostssl DATABASE USER ADDRESS METHOD [OPTIONS]
hostnossl DATABASE USER ADDRESS METHOD [OPTIONS]
一个HBA文件中可以包含多条记录,一条记录不能跨行存在,每条记录内部是由若干个空格、“/”和制表符分隔的字段组成。在实际认证过程中,身份认证模块需要依据HBA文件中记录的内容对每个连接请求进行检查,因此记录的顺序是非常关键的。每一条记录中各个字段的具体含义如下所述:

§ local:表示这条记录只接受通过Unix域套接字进行的连接。没有这种类型的记录,就不允许Unix域套接字的连接。只有在从服务器本机连接且在不指定-U参数的情况下,才是通过Unix域套接字连接。

§ host:表示这条记录既接受一个普通的TCP/IP套接字连接,也接受一个经过SSL加密的TCP/IP套接字连接。

§ hostssl:表示这条记录只接受一个经过SSL加密的TCP/IP套接字连接。

§ hostnossl:表示这条记录只接受一个普通的TCP/IP套接字连接。

§ DATABASE:声明当前记录所匹配且允许访问的数据库。特别地,该字段可选用all、sameuser以及samerole。其中all表示当前记录允许访问所有数据库对象;sameuser表示访问的数据库须与请求的用户同名才可访问;samerole表示访问请求的用户必须是与数据库同名角色中的成员才可访问。

§ USER:声明当前记录所匹配且允许访问的数据库用户。特别地,该字段可选用all以及“+角色(角色组)”。其中all表示允许所有数据库用户对象访问;“+角色(角色组)”表示匹配任何直接或间接(通过继承的方式)这个角色(角色组)的成员。

§ ADDRESS:指定与记录匹配且允许访问的IP地址范围。目前支持IPv4和IPv6两种形式的地址。

§ METHOD:声明连接时所使用的认证方法。目前openGauss所支持的认证方式包括trust、reject、sha256、cert以及gss。我们将在11.2.2小节着重介绍。

§ OPTIONS:这个可选字段的含义取决于选择的认证方法。目前作为保留项方便后续认证方式扩展,如支持基于ident认证时需要指定映射选项。

在openGauss数据库系统安装部署完成后,HBA文件中默认包含了超级用户的配置记录。对于其他管理员新创建的用户则需要重新进行配置。对于认证规则的配置建议遵循如下基本原则:

§ 靠前的记录有比较严格的连接参数和比较弱的认证方法。

§ 靠后的记录有比较宽松的连接参数和比较强的认证方法。

openGauss除了支持手工配置认证信息外,还支持使用GUC(Grand Unified Configuration)工具进行规则配置,如允许名为jack的用户在客户端工具所在的IP地址为122.10.10.30的地方以sha256方式登录服务端数据库database1:

gs_guc set -Z coordinator -N all -I all -h "host database1 jack 122.10.10.30/32 sha256"
这条命令将在所有的CN实例侧对应的HBA文件中添加对应规则。



服务端认证方法

02

openGauss安全认证的认证方法在HBA文件中由数据库运维人员配置,支持的认证方法包括trust认证、口令认证和cert认证。

1. trust认证
trust认证意味着采用当前认证模式时,openGauss无条件接受连接请求,且访问请求时无需提供口令。这个方法如果使用不当,可允许所有用户在不提供口令的情况下直接连入数据库。为保障安全,openGauss当前仅支持数据库超级用户在本地以trust方式登录,不允许远程连接使用trust认证方法。

2. 口令认证
openGauss目前主要支持sha256加密口令认证。由于整个身份认证过程中,不需要还原明文口令,因此采用PBKDF2单向加密算法。其中hash函数使用sha256算法,盐值则通过安全随机数生成。算法中涉及的迭代次数可由用户自己视不同的场景决定,需考虑安全和性能间的一个平衡。

为了保留对历史版本的兼容性,在某些兼容性场景下,openGauss还支持MD5算法对口令进行加密,但默认不推荐。

特别地,openGauss数据库管理员用户在创建用户信息时不允许创建空口令,这意味着非超级用户在访问登录时必须提供口令信息(命令方式或交互式方式)。用户的口令信息被存放在系统表pg_authid中的rolpassword字段中,如果为空则表示出现元信息错误。

3. cert认证
openGauss支持使用SSL安全连接通道(将在第3小节详细介绍)。cert认证表示使用SSL客户端进行认证,不需要提供用户密码。在该认证模式下,客户端和服务端数据经过加密处理。在连接通道建立后,服务端会发送主密钥信息给客户端以响应客户端的握手信息,这个主密钥将是服务端识别客户端的重要依据。值得注意的是,该认证方式只支持hostssl类型的规则。

在第1小节中,我们提到openGauss所支持的METHOD字段选项包括trust、reject、sha256、cert以及gss。除去上述介绍的三种认证方式外,reject选项表示对于当前认证规则无条件拒绝,一般用于“过滤”某些特定的主机。gss表示使用基于gssapi的kerberos认证,该认证方式依赖kerberos server组件,一般用于支持openGauss集群内部通信认证和外部客户端连接认证,外部客户端仅支持gsql或JDBC连接时使用。




原文链接:https://blog.csdn.net/enmotech/article/details/12261275

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论