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

【云小课】GaussDB(DWS)数据落盘安全吗?来直面三大灵魂拷问!

GaussDB DWS 2021-07-13
1112

点击上方蓝字,关注我们


GaussDB(DWS)作为一款运行在华为云上的核心数据仓库,客户大量的数据存储在DWS的数据节点中,DWS不仅拥有海量数据查询的极致性能,在安全方面还需要有加固防护措施。
当前数据库都是多个用户共同访问数据,这些数据都具有重要价值,关系到用户的核心资产和用户隐私,如何禁止别有用心的用户窃取以及黑客攻击,本课程给您提供数据的安全管理方法。

云数仓安全层层防护

· 云数仓外部:由华为云的云安全管理产品保驾护航。如:Anti-DDoS、DDoS、Web应用防火墙、漏洞扫描服务、企业主机安全、数据加密服务、SSL证书管理、云堡垒机等。
· 云数仓内部:主要通过三权分立、行级访问控制、审计管理三种方式进行防护。这三方式结合到数据开发实际场景中,简单可以概括为(1)谁能看?(2)能看啥?(3)看没看? 下面我们从这三个方面一一介绍:

(1)谁能看?

通过DWS三权分立模型,将管理员分成三类:系统管理员,安全管理员和审计管理员,不存在“一手遮天”的管理员,当某个管理员密码泄露时,使数据库破坏降到最低。从此各司其职,安全管理员负责用户审计管理员负责日志审计系统管理员负责系统运维

开启三权分立后,对象权限变化如下表说明:

开启方法:

1.录GaussDB(DWS)管理控制台。在左侧导航树中,单击“集群管理”。

2.在集群列表中,单击指定集群的名称,然后单击“安全设置”,打开三权分立开关。

依次设置安全管理员用户名、密码、审计管理员用户、密码。

3.单击“应用”。在弹出的“保存配置”窗口中,选择是否勾选“立即重启集群”,然后单击“是”,重启后生效。

(2)能看啥?

行级访问控制特性是将数据库访问控制精确到数据表行级别,使数据库达到行级访问控制的能力。不同用户执行相同的SQL查询操作,读取到的结果是不同的。即同一张表,不同用户只能查看自身相关的数据信息,不能查看其他用户的数据信息。

GaussDB(DWS)主要通过“ALTER TABLE tablename ENABLE ROW LEVEL SECURITY”语法实现行级访问控制,示例如下:

1.创建用户alice, bob, peter。

CREATE ROLE alice PASSWORD 'Gauss@123';CREATE ROLE bob PASSWORD 'Gauss@123';CREATE ROLE peter PASSWORD 'Gauss@123';

2.创建表public.all_data,包含不同用户数据信息。

CREATE TABLE public.all_data(id int, role varchar(100), data varchar(100));

3.向数据表插入数据。

INSERT INTO all_data VALUES(1, 'alice', 'alice data');INSERT INTO all_data VALUES(2, 'bob', 'bob data');INSERT INTO all_data VALUES(3, 'peter', 'peter data');

4.将表all_data的读取权限赋予alice,bob和peter用户。

GRANT SELECT ON all_data TO alice, bob, peter;

5.打开行访问控制策略开关。

ALTER TABLE all_data ENABLE ROW LEVEL SECURITY;

6.创建行访问控制策略,当前用户只能查看用户自身的数据。

CREATE ROW LEVEL SECURITY POLICY all_data_rls ON all_data USING(role = CURRENT_USER);

7.查看表详细信息。

 \d+ all_data                               Table "public.all_data" Column |          Type          | Modifiers | Storage  | Stats target | Description--------+------------------------+-----------+----------+--------------+------------- id     | integer                |           | plain    |              | role   | character varying(100) |           | extended |              | data   | character varying(100) |           | extended |              |Row Level Security Policies:    POLICY "all_data_rls"      USING (((role)::name = "current_user"()))Has OIDs: noDistribute By: HASH(id)Location Nodes: ALL DATANODESOptions: orientation=row, compression=no, enable_rowsecurity=true

8.切换至用户alice,执行SQL"SELECT * FROM all_data"

SET ROLE alice PASSWORD 'Gauss@123';SELECT * FROM all_data; id | role  |    data----+-------+------------  1 | alice | alice data(1 row)EXPLAIN(COSTS OFF) SELECT * FROM all_data;                           QUERY PLAN---------------------------------------------------------------- Streaming (type: GATHER)   Node/s: All datanodes   ->  Seq Scan on all_data         Filter: ((role)::name = 'alice'::name) Notice: This query is influenced by row level security feature(5 rows)

9.切换至用户peter,执行SQL"SELECT * FROM .all_data"

SET ROLE peter PASSWORD 'Gauss@123';SELECT * FROM all_data; id | role  |    data----+-------+------------  3 | peter | peter data(1 row) EXPLAIN(COSTS OFF) SELECT * FROM all_data;                           QUERY PLAN---------------------------------------------------------------- Streaming (type: GATHER)   Node/s: All datanodes   ->  Seq Scan on all_data         Filter: ((role)::name = 'peter'::name) Notice: This query is influenced by row level security feature(5 rows)

(3)看没看?

GaussDB(DWS)支持对特定数据库操作记录审计日志,包括:日志保留策略、用户越权访问、存储过程以及对数据库对象的DML、SELECT、COPY和DDL操作。
审计日志配置后,当GaussDB(DWS)集群状态异常,或根据业务需要,用户可以查询审计信息确定故障原因或定位历史操作记录。
配置方法:

1.登录GaussDB(DWS)管理控制台。单击“集群管理”。

2.在集群列表中,单击指定集群的名称,然后单击“安全设置”。

3.在“审计配置”区域中,设置审计日志保留策略。

4.根据需要设置以下操作的审计开关。

GaussDB(DWS)默认还开启了以下的关键审计项。

5.设置是否开启审计日志转储功能。

6.单击“应用”。

查看审计日志:

只有拥有AUDITADMIN属性的用户才有查看权限,查询格式如下:

pg_query_audit(timestamptz startime,timestamptz endtime,audit_log)

1.查询审计记录。

SELECT * FROM pg_query_audit('2015-07-15 08:00:00','2015-07-15 09:47:33');

查询结果如下:

        time          |     type      | result | username |    database    | client_conninfo |  object_name   |                          detail_info                | node_name |            thread_id            | local_port | remote_port------------------------+---------------+--------+----------+----------------+-----------------+----------------+---------------------------------------------------------------+-----------+---------------------------------+------------+------------- 2015-07-15 08:03:55+08 | login_success | ok     | dbadmin | gaussdb       | gs_clean@::1    | gaussdb       | login db(gaussdb) success,the current user is:dbadmin       | cn_5003   | 139808902997776@490233835920483 | 9000       | 55805
该条记录表明,用户ommdbadmin在2021-02-23 21:49:57.82+08登录数据库gaussdb。其中client_conninfo字段在log_hostname启动且IP连接时,字符@后显示反向DNS查找得到的主机名。
2.查询所有CN节点审计记录。
SELECT * FROM pgxc_query_audit('2019-01-10 17:00:00','2019-01-10 19:00:00') where type = 'login_success' and username = 'user1';
查询结果如下:
          time          |     type      | result | username | database | client_conninfo | object_name |                     detail_info                      |  node_name   |            thread_id            | local_port | remote_port ------------------------+---------------+--------+----------+----------+-----------------+-------------+------------------------------------------------------+--------------+---------------------------------+------------+------------- 2019-01-10 18:06:08+08 | login_success | ok     | user1    | gaussdb | gsql@[local]    | gaussdb    | login db(gaussdb) success,the current user is:user1 | coordinator1 | 139965149210368@600429968516954 | 17560      | null 2019-01-10 18:06:22+08 | login_success | ok     | user1    | gaussdb | gsql@[local]    | gaussdb    | login db(gaussdb) success,the current user is:user1 | coordinator1 | 139965149210368@600429982697548 | 17560      | null 2019-01-10 18:06:54+08 | login_success | ok     | user1    | gaussdb | gsql@[local]    | gaussdb    | login db(gaussdb) success,the current user is:user1 | coordinator2 | 140677694355200@600430014804280 | 17562      | null(3 rows)
查询结果显示,用户user1在CN1和CN2的成功登录记录。
往期精彩回顾


文章转载自GaussDB DWS,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论