openGauss源码解析(9)

openGauss源码解析:openGauss简介(8)

1.5.5 数据库安全

1. 访问控制

管理用户对数据库的访问控制权限涵盖数据库系统权限和对象权限。

openGauss数据库支持基于角色的访问控制机制(role-based access control,RBAC),将角色和权限关联起来,通过将权限赋予给对应的角色,再将角色授予给用户,可实现用户访问控制权限管理。其中登录访问控制通过用户标识和认证技术来共同实现,而对象访问控制则基于用户在对象上的权限,通过对象权限检查实现对象访问控制。管理员为执行操作的用户分配所需要的最小权限,从而将数据库使用风险降到最低。

openGauss数据库支持三权分立权限访问控制模型,数据库角色可分为系统管理员、安全管理员和审计管理员。其中安全管理员负责创建和管理用户,系统管理员负责授予和撤销用户权限,审计管理员负责审计所有用户的行为。

默认情况下,使用基于角色的访问控制模型。客户可通过设置参数来选择是否开启三权分立控制模型。

2. 控制权和访问权分离

针对系统管理员用户,实现表对象的控制权和访问权分离,提高普通用户数据安全性,限制管理员对象访问权限。

该特性适用于如下场景:即对于有多个业务部门的企业,各部门间使用不同的数据库用户进行业务操作,同时存在同级别的数据库维护部门使用数据库管理员进行运维操作,业务部门希望在未经授权的情况下,管理员用户只能对各部门的数据进行控制操作(DROP、ALTER、TRUNCATE),但是不能进行访问操作(INSERT、DELETE、UPDATE、SELECT、COPY):即针对管理员用户,表对象的控制权和访问权分离,提高用户数据的安全性。

系统管理员可以在创建用户时指定INDEPENDENT属性,表示该用户为私有用户。针对该用户的对象,数据库管理员(包含初始用户和其他管理员用户)在未经其授权前,只能进行控制操作(DROP、ALTER、TRUNCATE),无权进行INSERT、DELETE、SELECT、UPDATE、COPY、GRANT、REVOKE、ALTER OWNER操作。

3. 数据库加密认证

采用基于RFC5802机制的口令加密认证方法。

加密认证过程中采用单向哈希不可逆加密算法PBKDF2,可有效防止彩虹攻击。

创建用户所设置的口令被加密存储在系统表中。整个认证过程中口令加密存储和传输,通过计算相应的哈希值并与服务端存储的值比较来进行正确性校验。

统一加密认证过程中的消息处理流程,可有效防止攻击者通过抓取报文猜解用户名或者口令的正确性。

4. 数据库审计

审计日志记录用户对数据库的启停、连接、DDL(data definition language,数据定义语言)、DML、DCL(data control language,数据控制语言)等操作。审计日志机制主要增强数据库系统对非法操作的追溯及举证能力。

用户可以通过参数配置对哪些语句或操作记录审计日志。

审计日志记录事件的时间、类型、执行结果、用户名、数据库、连接信息、数据库对象、数据库实例名称和端口号以及详细信息。支持按起止时间段查询审计日志,并根据记录的字段进行筛选。

数据库安全管理员可以利用这些日志信息,重现导致数据库现状的一系列事件,找出非法操作的用户、时间和内容等。

5. 全密态数据库等值查询

密态数据库与流数据库、图数据库一样,是专门处理密文数据的数据库系统。数据以加密形态存储在数据库服务器中,数据库支持对密文数据的检索与计算,而与查询任务相关的词法解析、语法解析、执行计划生成、事务一致性保证、存储都继承原有数据库能力。

密态数据库在客户端进行加密,需要在客户端进行大量的操作,包括管理数据密钥、加密敏感数据、解析并修改实际执行的SQL语句,并且识别返回到客户端的加密的数据信息。openGauss将这一系列的复杂操作,自动化地封装在前端解析中,对SQL查询中与敏感信息的加密替换,使得发送至数据库服务器侧的查询任务也不会泄露用户查询意图,减少客户端的复杂安全管理及操作难度,实现用户应用开发无感知。

密态数据库通过技术手段实现数据库密文查询和计算,解决数据库云上隐私泄露问题及第三方信任问题。实现云上数据的全生命周期保护,实现数据拥有者与数据管理者读取能力分离。

6. 网络通信安全特性

支持通过SSL(secure sockets layer,安全套接层)加密客户端和服务器之间的通信数据,保证客户的客户端与服务器通信安全。采用TLS 1.2(transport layer security,传输层安全)协议标准,并使用安全强度较高的加密算法套件。

7. 行级访问控制

行级访问控制特性将数据库访问粒度控制到数据表行级别,使数据库达到行级访问控制的能力。不同用户执行相同的SQL查询操作,按照行访问控制策略,读取到的结果可能是不同的。

用户可以在数据表创建行访问控制策略,该策略是指针对特定数据库用户、特定SQL操作生效的表达式。当数据库用户对数据表访问时,若SQL满足数据表特定的行级访问控制策略,在查询优化阶段将满足条件的表达式,按照属性(PERMISSIVE | RESTRICTIVE)类型,通过AND或OR方式拼接,应用到执行计划上。

行级访问控制的目的是控制表中行级数据可见性,通过在数据表上预定义过滤条件,在查询优化阶段将满足条件的表达式应用到执行计划上,影响最终的执行结果。当前行级访问控制支持SELECT、UPDATE、DELETE等SQL语句。

8. 资源标签

资源标签(resource label)特性通过将数据库资源按照用户自定义的方式划分,实现资源分类管理的目的。管理员可以通过配置资源标签统一地为一组数据库资源进行安全策略的配置如审计或数据脱敏。

资源标签能够将数据库资源按照“特征”、“作用场景”等分组归类,使用资源标签管理数据库资源,能够大大降低策略配置的复杂度和信息冗余度,提高管理效率。

当前资源标签所支持的数据库资源类型包括schema(模式)、table(表)、column(列)、view(视图)、function(函数)。

9. 动态数据脱敏

为了在一定程度上限制非授权用户对隐私数据的窥探,可以利用动态数据脱敏(Dynamic Data Masking)特性保护用户隐私数据。在非授权用户访问配置了动态数据脱敏策略的数据时,数据库将返回脱敏后的数据而达到对隐私数据保护的目的。

管理员可以在数据列上创建动态数据脱敏策略,该策略指出针对特定用户场景应采取何种数据脱敏方式。在开启动态数据脱敏功能后,当用户访问敏感列数据时,系统将用户身份信息,例如访问IP、客户端工具、用户名来匹配相应的脱敏策略,在匹配成功后将根据脱敏策略对访问列的查询结果实施数据脱敏。

动态数据脱敏的目的是在不改变源数据的前提下,通过在脱敏策略上配置有针对性的用户场景(过滤条件)、指定的敏感列标签(LABEL)和对应的脱敏方式(MASKING FUNCTION)来灵活地进行隐私数据保护。

10. 统一审计

统一审计(unified auditing)利用策略和条件在数据库内部有选择地进行审计,管理员可以对数据库资源或资源标签统一配置审计策略,从而达到简化管理,针对性地生成审计日志,减少审计日志冗余,提高管理效率的目的。

管理员可以定制化地为操作行为或数据库资源配置审计策略,该策略针对特定的用户场景、用户行为或数据库资源进行审计。在开启了统一审计功能后,当用户访问数据库时,系统将根据用户身份信息如访问IP、客户端工具、用户名来匹配相应的统一审计策略,之后根据策略信息对用户行为按照访问资源(LABEL)和用户操作类型(DML | DDL)进行统一审计。

统一审计的目的是将现有的传统审计行为转变为针对性的跟踪审计行为,将目标之外的行为排除在审计之外,从而简化了管理,提高了数据库生成审计数据的安全性。

11. 用户口令强度校验机制

为了加固客户账户和数据的安全,禁止设置过低强度的口令,当初始化数据库、创建用户、修改用户时需要指定密码。密码必须满足强度校验,否则会提示用户重新输入密码。

账户密码复杂度对用户密码字母大小写、数字、特殊字符的最少个数,最大最小长度进行了限制,并且要求不能和用户名、倒写用户名相同,不能是弱口令,从而增强了用户账户的安全性。

其中弱口令指的是强度较低,容易被破解的密码,对于不同的用户或群体,弱口令的定义可能会有所区别,用户需要自己添加定制化的弱口令。

用户口令强度校验机制是否开启由参数password_policy控制,当该参数设置为1时表示采用密码复杂度校验,默认值为1。

12. 数据加密存储

提供对插入数据的加密存储。为用户提供数据加解密接口,针对用户识别的敏感信息列使用加密函数,使得数据加密后再存储在表内。

当用户需要对整张表进行加密存储处理时,则需要为每一列单独书写加密函数,不同的属性列可使用不用的入参。

当具有对应权限的用户需要查看具体的数据时,可通过解密函数接口对相应的属性列进行解密处理。

posted @ 2024-03-30 11:40  openGauss-bot  阅读(15)  评论(0编辑  收藏  举报