写点什么

云小课|三大灵魂拷问 GaussDB(DWS) 数据落盘安全问题

发布于: 2 小时前


阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击此处

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


本文分享自《云小课|GaussDB(DWS)数据落盘安全吗?来直面三大灵魂拷问!》,原文作者:阅识风云。



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 LEVELSECURITY”语法实现行级访问控制,示例如下:


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),请猛戳


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

发布于: 2 小时前阅读数: 6
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
云小课|三大灵魂拷问GaussDB(DWS)数据落盘安全问题