首页 > 其他分享 >详解数仓的3A安全能力

详解数仓的3A安全能力

时间:2024-09-02 19:57:53浏览次数:12  
标签:审计 数仓 角色 用户 认证 详解 ldap 3A 权限

本文分享自华为云社区《GaussDB(DWS) 3A安全能力》,作者:yd_281561943。

1. 前言

  • 适用版本:【8.0.0 (及以上)】

数据库安全是指保护数据库以防止未授权用户窃取、篡改和破坏数据库中数据信息的技术。数据库安全技术可以简单分为3个A:

  • Authentication(认证):认证解决让谁进来的问题(进门)
  • Authorization(授权):授权解决能干啥的问题(干活)
  • Audit(审计):审计解决干了啥的问题(监控)

2. Authentication——认证

连接认证解决用户能否登录数据库的问题。本产品支持如下几种认证方式:

  • 基于主机的认证:服务器端根据客户端的IP地址、用户名及要访问的数据库来查看配置文件从而判断用户是否通过认证。
  • 口令认证:包括远程连接的加密口令认证和本地连接的非加密口令认证。
  • 证书认证:此模式需进行SSL连接配置且需要客户端提供有效的SSL证书,不需要提供用户密码。
  • 第三方认证:ldap、oneaccess等

这几种方式都需要配置“pg_hba.conf”文件,pg_hba.conf文件格式,pg_hba有若干行的HBA记录组成:

连接类型

数据库

用户

IP地址

认证方式

TYPE

DATABASE

USER

ADDRESS

METHOD

一条HBA记录的含义是允许哪些用户(USER),从哪些IP地址(ADDRESS),以哪种连接类型(TYPE),以哪种认证方式(METHOD),连接哪些数据库(DATABASE)。

认证时对每个连接请求从下到下依次检查hba文件中的记录,如果当前记录匹配,就返回。 HBA记录的顺序非常关键。hba的这种逻辑非常重要,轻易不应该变动,否则会引发非常严重的问题。

案例:hba逻辑变动引发的问题

ldap连接出现过一个问题,升级过程中pg_hba.conf文件中的记录会排序,导致升级前后ldap配置行顺序变化,到sha256配置行后面了。由于pg_hba.conf的顺序遍历机制,升级后ldap用户错误匹配到sha256配置行,连接失败。

为解决顺序变动引发的问题,第一版的修改方案是将ldap判断逻辑放在循环遍历的开始位置:先看认证类型,如果是ldap认证就判断配置行method字段是否为ldap,不是就跳到下一行,直到找到method是ldap的为止。

在这版修改方案下,ldap认证方式的连接匹配到的都是ldap的hba记录。用户连接数据库时,可以成功连接,但是业务却无法进行,报错:“Invalid username/password,login denied.”。原因是内部节点执行语句时会进行节点之间的认证,认证类型为trust,不会提供密码。修改之后只会匹配到ldap记录,ldap方式需要密码,从而报错。

升级前后,ldap与sha256配置行位置如下:

升级前:
host all @/etc/ldap/ldap_user 0.0.0.0/0 ldap   ldapserver=xxx.xxx.xxx.xxx ldapport=xxx ldapprefix="CN=" ldapsuffix="OU=test_dmj_group,DC=com"
host all all                  0.0.0.0/0 sha256
升级后:
host all all                  0.0.0.0/0 sha256
host all @/etc/ldap/ldap_user 0.0.0.0/0 ldap   ldapserver=xxx.xxx.xxx.xxx ldapport=xxx ldapprefix="CN=" ldapsuffix="OU=test_dmj_group,DC=com"
  • TYPE:type是local、host、hostssl、hostnossl四种之一。
    分别表示:
    local: 仅允许unix domain socket连接。
    host: 允许TCP/IP连接,可以匹配SSL和非SSL的连接请求。
    hostssl: 允许TCP/IP连接,仅匹配SSL的连接请求。
    hostnossl: 允许TCP/IP连接,仅匹配非SSL的连接请求。
  • DATABASE:可以用all表示所有数据库,也可以用逗号分隔显式指定数据库。
  • USER:可以用all表示所有用户,也可以用逗号分隔显式指定用户。可以是特定数据库用户的名称,也可以是前面带有+的组名称。+标记实际上意味着“匹配直接或间接属于该角色的任何角色” ,而没有+标记的名称仅匹配该特定角色。
  • ADDRESS:声明记录所匹配且允许访问的地址。type是local时,表示本机连接,不需要指定IP地址。
  • METHOD:认证方式有trust、reject、md5、sha256、ldap、cert、oneaccess等。
    trust:白名单,无条件允许连接。
    reject:黑名单,无条件拒绝连接。
    md5: pg的password认证方式,不安全。
    sha256: gaussdb的password认证。
    ldap:使用LDAP进行第三方认证。
    cert:客户端证书认证模式,此模式需进行SSL连接配置且需要客户端提供有效的SSL证书,不需要提供用户密码。
    oneaccess:使用oneaccess进行第三方认证。

3.Authorization——授权

权限表示用户对某个数据库对象的操作是否被允许。GaussDB(DWS)中的权限包含三种场景:系统权限、数据对象权限、用户权限。

3.1 系统权限

3.1.1 三权分立

默认情况下拥有SYSADMIN属性的系统管理员,具备系统最高权限。在实际业务管理中,为了避免系统管理员拥有过度集中的权利带来高风险,可以设置三权分立,将系统管理员的CREATEROLE属性和AUDITADMIN属性权限分别给安全管理员和审计管理员。

3.1.2 系统权限授权

系统权限又称为用户属性,包括SYSADMIN、CREATEDB、CREATEROLE、AUDITADMIN和LOGIN。

系统权限可以在创建、修改角色或者用户时进行授权,CREATE/ALTER ROLE/USER user_name [WITH] option语句的option中,可以设置以下字段,来实现系统权限赋权。

  • SYSADMIN | NOSYSADMIN
    决定一个新角色是否为“系统管理员”,具有SYSADMIN属性的角色拥有系统最高权限。缺省为NOSYSADMIN。
  • AUDITADMIN | NOAUDITADMIN
    定义角色是否有审计管理属性。缺省为NOAUDITADMIN。
  • CREATEDB | NOCREATEDB
    决定一个新角色是否能创建数据库。新角色没有创建数据库的权限。缺省为NOCREATEDB。
  • CREATEROLE | NOCREATEROLE
    决定一个角色是否可以创建新角色(也就是执行CREATE ROLE和CREATE USER)。 一个拥有CREATEROLE权限的角色也可以修改和删除其他角色。缺省为NOCREATEROLE。
  • LOGIN | NOLOGIN
    具有LOGIN属性的角色才可以登录数据库。一个拥有LOGIN属性的角色可以认为是一个用户。缺省为NOLOGIN。

3.2 数据对象权限

数据对象包括表和视图、指定字段、数据库、函数、模式等,对它们的创建、增、删、改、查等操作就是数据对象权限。授权语法格式为:GRANT [privileges] ON [objects] TO [users],回收权限语法格式为REVOKE [privileges] ON [objects] FROM [users]。

对象类型

权限列表

表、视图

SELECT、INSERT、UPDATE、DEELETE、TRUNCATE、REFERENCES、

TRIGGER、ANALYZE、ANALYSE、VACUUM、ALTER、DROP

表字段

SELECT、INSERT、UPDATE、REFERENCES

数据库

CREATE、CONNECT、TEMPORARY


USAGE

外部数据源

USAGE

外部服务器

USGAE

函数

EXECUTE、ALTER、DROP(ALTER、DROP为910版本新加)

过程语言

USAGE

大对象

SELECT、UPDATE

序列

SELECT、UPDATE、USAGE

子集群

CREATE、USAGE、COMPUTE

模式

CREATE、USAGE、ALTER、DROP

表空间

CREATE

类型

USAGE

目录

READ、WRITE

3.3 用户权限

3.3.1 用户权限授权

将一个角色或用户的权限授予一个或多个其他角色或用户。被授权的角色或用户就拥有授权的角色或用户的权限。当声明了WITH ADMIN OPTION,被授权的用户可以将该权限再次授予其他角色或用户,以及撤销所有由该角色或用户继承到的权限。当授权的角色或用户发生变更或被撤销时,所有继承该角色或用户权限的用户拥有的权限都会随之发生变更。语法格式为GRANT role TO user。

3.3.2 预置角色

GaussDB(DWS)提供了一组预置角色,以“gs_role_”开头命名,这些预置角色具有一些固定的权限。当某些用户需要进行相关操作,只需要把预置角色授给用户即可。目前GaussDB(DWS)的预置角色如下表:

角色

权限描述

gs_role_signal_backend

具有调用函数pg_cancel_backend、pg_terminate_backend、pg_terminate_query、pg_cancel_query、pgxc_terminate_query、pgxc_cancel_query来取消或终止其他会话的权限,但不能操作属于初始用户的会话。

gs_role_read_all_stats

读取系统状态视图并且使用与扩展相关的各种统计信息,包括有些通常只对系统管理员可见的信息。

gs_role_analyze_any

具有系统级ANALYZE权限类似系统管理员用户,跳过schema权限检查,对所有的表可以执行ANALYZE。

gs_role_vacuum_any

具有系统级VACUUM权限类似系统管理员用户,跳过schema权限检查,对所有的表可以执行VACUUM。

gs_redaction_policy

具有创建、修改、删除脱敏策略的权限,对所有的表都可以执行CREATE、ALTER、DROP REDACTION POLICY。9.1.0及以上集群版本支持。

gs_role_sql_management

具有执行plan management相关的管理命令和管理函数的权限。仅8.2.1.200集群版本支持。

4.Audit——审计

审计是指记录用户的登陆退出以及登陆后在数据库里的行为操作,使得数据库安全管理员可以利用这些日志信息,找出非法操作的用户,时间和内容等。

4.1 设置审计配置项

要使数据库能够审计到某项功能,需要打开审计的总开关(audit_enabled)和对应的审计项开关(audit_operation_exec),二者均支持动态加载,在数据库运行期间修改该配置项的值会立即生效,无需重启数据库。

有两点需要注意,其一如果审计ddl操作,需要另外配置audit_system_object 来审计具体某个对象的ddl 操作;其二如果是审计事务,事务内部的操作是否审计需要结合其具体的配置项是否配置。审计项的参数控制:

参数名称

类型

参数范围

参数说明

audit_enabled

bool

0,1

控制审计进程的开启和关闭。审计进程开启后,将从管道读取后台进程写入的审计信息,并写入审计文件

audit_inner_tool

bool

0,1

是否审计GaussDB(DWS)中内部维护工具的各类操作

audit_operation_error

enum

none,syn_success,login,user_lock,violation,grant_revoke,ddl,select, insert, update, delete, merge, discard……

是否审计GaussDB(DWS)中各类执行失败的操作,由用户根据实际需求进行配置

audit_operation_exec

enum

none,all,login,logout,database_process,user_lock,grant_revoke,ddl,select, insert, update, delete, discard……

是否审计GaussDB(DWS)中各类执行成功的操作,由用户根据实际需求进行配置

audit_system_object

integer

[0,4194303]

该参数决定是否对数据库对象的CREATE、DROP、ALTER操作进行审计。数据库对象包括Database, schema, user, table等。

4.2 查看审计日志

审计查询命令是pgxc_query_audit:

select * from pgxc_query_audit(timestamptz startime,timestamptz endtime,audit_log);

startime 和 endtime 分别表示审计记录的开始时间和结束时间,audit_log 表示所查看的审计日志新的所在的物理文件路径,当不指定audit_log 时,默认查看连接当前实例的审计日志信息。审计查询结果如下例:

postgres=# create table t1(id int);
ERROR:  relation "t1" already exists
postgres=# select * from pgxc_query_audit('2021-03-21','2021-03-30') order by endtime desc limit 1;
-[ RECORD 1 ]---+--------------------------------
begintime       | 2021-03-21 11:49:41.643+08
endtime         | 2021-03-21 11:49:41.652+08
operation_type  | ddl
audit_type      | ddl_table
result          | failed
username        | perfadm
database        | postgres
client_conninfo | gsql@[local]
object_name     | t1
command_text    | create table t1(id int);
detail_info     | relation "t1" already exists
transaction_xid | 0
query_id        | 1062177
node_name       | cn_5001
thread_id       | 139916885260032@669613657906735
local_port      | 6000
remote_port     |

5. 其他数据仓库安全技术

数据安全展示:数据脱敏、行级访问控制。

数据安全存储:数据存储加密、透明加密。

 

点击关注,第一时间了解华为云新鲜技术~

标签:审计,数仓,角色,用户,认证,详解,ldap,3A,权限
From: https://blog.51cto.com/u_15214399/10722044

相关文章

  • 设计模式-工厂模式设计与详解
    一、工厂模式概述工厂模式(FactoryPattern)是一种常用的创建型设计模式,其核心目的是实现创建对象的接口和具体的实例化分离,通过建立一个工厂类,对实现了同一接口的一些类进行实例的创建,以增加系统的灵活性和可维护性。当需要大量创建一个类的实例的时候,可以使用工厂模式,即从原生的使......
  • flash详解
    flash详解什么是FlashFlash全名叫做FlashMemory,从名字就能看出,是种数据存储设备,存储设备有很多类,Flash属于非易失性存储设备(Non-volatileMemoryDevice),与此相对应的是易失性存储设备(VolatileMemoryDevice)。关于什么是非易失性/易失性,从名字中就可以看出,非易失性就是不容......
  • 详解 ThreadPoolExecutor 的参数含义及源码执行流程?
    Java学习+面试指南:https://javaxiaobear.cn线程池是为了避免线程频繁的创建和销毁带来的性能消耗,而建立的一种池化技术,它是把已创建的线程放入“池”中,当有任务来临时就可以重用已有的线程,无需等待创建的过程,这样就可以有效提高程序的响应速度。但如果要说线程池的话一定离不开Th......
  • java定义通用返回结果类ResultVO使用示例详解
    java定义通用返回结果类ResultVO使用示例详解定义通用返回结果类定义ResultVO类,作返回给前端的对象结构,主要有4个字段code:错误码data:内容message:消息description:具体描述importlombok.Data;importjava.io.Serializable;/***通用返回结果类*@param<T>*/@D......
  • 【Qt笔记】QTableView控件详解
     目录引言 一、定义与架构二、主要功能与特点2.1 显示表格数据2.2编辑表格数据2.3自定义外观和交互2.4数据排序和过滤2.5支持拖放操作2.6自适应大小2.7上下文菜单2.8信号与槽三、常用属性设置3.1设置模型3.2 设置选择模型3.3 隐藏垂直标题3.4 ......
  • 【C语言】文件操作(详解)
    文章目录1.为什么需要文件?2.什么是文件?2.1文件分类2.2文件名3.文件的使用3.1文件指针3.2打开和关闭文件3.2.1文件使用方式3.2.2标准输入输出流3.3文件输入输出函数3.3.1字符输入输出实现文件拷贝3.3.2文本行输入输出3.3.3格式化输入输出3.3.4二进制输入输出3.3.5sscanf/sprintf函......
  • 【C语言】顺序表详解,灵活运用所学知识
    文章目录前言1.什么是顺序表?1.1线性表2.编写你的顺序表!2.0赛前准备2.1初始化2.2容量检查2.3打印顺序表2.4尾插和尾删2.5头插和头删2.6插入和删除2.7查找和更改3.菜单一些err总结前言顺序表是我们学习数据结构第一阶段的必经之路什么是顺序表,且听我慢慢道来本篇博客用到的......
  • 跨境电商寻找新增长点的策略详解
    前言:在全球化和数字化的大潮中,跨境电商已成为推动国际贸易的重要力量。面对不断变化的市场需求和日益激烈的竞争环境,企业必须寻找新的增长点以保持竞争力。本文将探讨跨境电商如何通过深耕特定市场、数据驱动运营和合规经营等策略,实现可持续增长。深耕特定市场与本地化策略市场......
  • ECharts实现雷达图详解
    ECharts是一款由百度开源的数据可视化工具,它提供了丰富的图表类型,如折线图、柱状图、饼图、散点图、雷达图、地图、K线图、热力图、仪表盘等,以及丰富的交互功能。ECharts组件的核心功能实现原理主要包括以下几个方面:数据驱动:ECharts采用数据驱动的设计理念,图表的生成和更新......
  • Python读写xlsx文件详解
    Openpyxl介绍在数据处理和分析的过程中,Excel文件由于其直观的表格形式以及易操作的特点,被广泛应用于各个行业和领域。而Python作为一种强大的编程语言,自然也提供了多种处理Excel文件的库。其中,openpyxl库就是专门用于读写.xlsx文件的Python库。本文将详细介绍如何使用openpyxl库......