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安全连接通道(在11.2.3章节详细介绍)。cert认证表示使用SSL客户端进行认证,不需要提供用户密码。在该认证模式下,客户端和服务端数据经过加密处理。在连接通道建立后,服务端会发送主密钥信息给客户端以响应客户端的握手信息,这个主密钥将是服务端识别客户端的重要依据。值得注意的是,该认证方式只支持hostssl类型的规则。
在11.2.1章节中,我们提到openGauss所支持的METHOD字段选项包括trust、reject、sha256、cert以及gss。除去上述介绍的三种认证方式外,reject选项表示对于当前认证规则无条件拒绝,一般用于“过滤”某些特定的主机。gss表示使用基于gssapi的kerberos认证,该认证方式依赖kerberos server组件,一般用于支持openGauss集群内部通信认证和外部客户端连接认证,外部客户端仅支持gsql或JDBC连接时使用。