目录
openGauss数据库SQL引擎
openGauss数据库执行器技术
openGauss存储技术
openGauss事务机制
openGauss数据库安全
Ⅰ.openGauss安全机制概览
Ⅱ.openGauss安全认证
1.客户端配置信息
2.服务端认证方法
3.安全认证通道
4.RFC5802认证协议
Ⅲ.openGauss角色管理机制
Ⅳ.openGauss审计与追踪
Ⅴ.openGauss数据安全技术
Ⅵ.openGauss云安全技术
Ⅶ.openGauss智能安全机制
openGauss数据库安全
随着数字化浪潮的飞速发展,数字、连接、信号、人工智能充斥着人们生活的各个领域。这些数字化信息被快速地转换成数据存放在各式各样的数据库系统中,通过进一步的数据管理与分析产生商业价值。这些价值数据或被存放在企业相对封闭的私有网络内,或被存放在相对开放的公有云环境下,又或是集成在智能系统中。人们在享受由数字化发展所带来的便捷生活同时,也可能面临着无处不在的隐私泄露、信息篡改、数据丢失等安全风险。
数据库安全作为数据库系统的护城河,通过访问登录认证、用户权限管理、审计与监视、数据隐私保护以及安全信道等技术手段防止恶意攻击者访问、窃取、篡改和破坏数据库中的数据,阻止未授权用户通过系统漏洞进行仿冒、提权等路径恶意使用数据库。
openGauss作为新一代自治安全数据库,为有效保障用户隐私数据、防止信息泄露,构建了由内而外的数据库安全保护措施。本章节将介绍和分析openGauss所采用的安全技术以及在不同应用场景下所采取的不同的安全实施策略。
一.openGauss安全机制概览
传统数据库系统作为独立的组件构建于特定的操作系统平台上以对外提供数据服务或对接可视化管理界面对外提供数据管理服务,整个系统部署在一个封闭的网络环境中。系统中的数据存放于物理存储介质上,存储介质可以为机械磁盘,也可以为SSD高速硬盘。硬件的稳定性和可靠性作为重要的一个环节,保障了数据整体的存储安全。
随着云化技术的快速发展,数据逐步上云,系统所处的环境越来越复杂,相对应的系统风险也逐步增加。openGauss作为分布式系统需要横跨不同的网络区域进行部署。除了需要像传统数据库那样从系统访问、数据导入导出、数据存储等维度来考虑系统安全体系外,还需要考虑网络安全、虚拟隔离等等与实际业务场景紧密相关的安全措施。一个完整的openGauss安全机制体系如图11-1所示。openGauss安全机制充分考虑了数据库可能的接入方,包括DBA运维人员、用户、应用程序以及通过攻击途径连接数据库的攻击者等。
图1 openGauss安全机制体系
openGauss提供了用户访问所需的客户端工具GaussSQL(简称为gsql),同时支持JDBC/ODBC等通用客户端工具。整个openGauss系统通过认证模块来限制用户对数据库的访问,通过口令认证、证书认证等机制来保障认证过程中的安全,同时可以通过黑白名单限制访问IP。
用户以某种角色身份登录系统后,通过基于角色的访问控制机制(Role Based Access Control,RBAC),可获得相应的数据库资源以及对应的对象访问权限。用户每次在访问数据库对象时,均需要使用存取控制机制(Access Control List,ACL)进行权限校验。常见的用户包括超级用户、管理员用户和普通用户,这些用户依据自身角色的不同,获取相应的权限,并依据ACL来实现对对象的访问控制。所有访问登录、角色管理、数据库运维操作等过程均通过独立的审计进程进行日志记录,以用于后期行为追溯。
openGauss在校验用户身份和口令之前,需要验证最外层访问源的安全性,包括端口限制和IP地址限制。访问信息源验证通过后,服务端身份认证模块对本次访问的身份和口令进行有效性校验,从而建立客户端和服务端之间的安全信道。整个登录过程通过一套完整的认证机制来保障的,满足RFC5802通信标准。登录系统后用户依据不同的角色权限进行资源管理。角色是目前主流的权限管理概念,角色实际是权限的集合,用户则归属于某个角色组。管理员通过增加和删除角色的权限,可简化对用户成员权限的管理。
用户登录后可访问的数据库对象包括表(Table)、视图(View)、索引(Index)、序列(Sequence)、数据库(Database)、模式(Schema)、函数(Function)以及语言(Language)等。在11.3.3章节将介绍到其他的一些对象。实际应用场景中,不同的用户所获得的权限均不相同,因此每一次对象访问操作,都需要进行权限检查。当用户权限发生变更时,需要更新对应的对象访问权限,且权限变更即时生效。
用户对对象的访问操作本质上是对数据的管理,包括增、删、改、查等各类操作。数据在存储、传输、处理、显示等阶段都会面临信息泄露的风险。openGauss提供了数据加密、数据脱敏以及加密数据导入导出等机制保障数据的隐私安全。
二.openGauss安全认证
openGauss数据库是一款标准的基于客户端/服务端(C/S)模式工作的数据库系统,每一个完整的会话连接都由后台服务进程和客户端进程组成。一个完整的客户端认证过程如图2所示。
(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认证。
- trust认证
trust认证意味着采用当前认证模式时,openGauss无条件接受连接请求,且访问请求时无需提供口令。这个方法如果使用不当,可允许所有用户在不提供口令的情况下直接连入数据库。为保障安全,openGauss当前仅支持数据库超级用户在本地以trust方式登录,不允许远程连接使用trust认证方法。 - 口令认证
openGauss目前主要支持sha256加密口令认证。由于整个身份认证过程中,不需要还原明文口令,因此采用PBKDF2单向加密算法。其中hash函数使用sha256算法,盐值则通过安全随机数生成。算法中涉及的迭代次数可由用户自己视不同的场景决定,需考虑安全和性能间的一个平衡。
为了保留对历史版本的兼容性,在某些兼容性场景下,openGauss还支持MD5算法对口令进行加密,但默认不推荐。
特别地,openGauss数据库管理员用户在创建用户信息时不允许创建空口令,这意味着非超级用户在访问登录时必须提供口令信息(命令方式或交互式方式)。用户的口令信息被存放在系统表pg_authid中的rolpassword字段中,如果为空则表示出现元信息错误。
- cert认证
openGauss支持使用SSL安全连接通道(将在第3小节详细介绍)。cert认证表示使用SSL客户端进行认证,不需要提供用户密码。在该认证模式下,客户端和服务端数据经过加密处理。在连接通道建立后,服务端会发送主密钥信息给客户端以响应客户端的握手信息,这个主密钥将是服务端识别客户端的重要依据。值得注意的是,该认证方式只支持hostssl类型的规则。
在第1小节中,我们提到openGauss所支持的METHOD字段选项包括trust、reject、sha256、cert以及gss。除去上述介绍的三种认证方式外,reject选项表示对于当前认证规则无条件拒绝,一般用于“过滤”某些特定的主机。gss表示使用基于gssapi的kerberos认证,该认证方式依赖kerberos server组件,一般用于支持openGauss集群内部通信认证和外部客户端连接认证,外部客户端仅支持gsql或JDBC连接时使用。
未完待续......