

点击上方蓝字,关注我们

云数仓安全层层防护
(1)谁能看?


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


开启方法:
1.录GaussDB(DWS)管理控制台。在左侧导航树中,单击“集群管理”。
2.在集群列表中,单击指定集群的名称,然后单击“安全设置”,打开三权分立开关。
依次设置安全管理员用户名、密码、审计管理员用户、密码。

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

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)看没看?
1.登录GaussDB(DWS)管理控制台。单击“集群管理”。
2.在集群列表中,单击指定集群的名称,然后单击“安全设置”。
3.在“审计配置”区域中,设置审计日志保留策略。




5.设置是否开启审计日志转储功能。
6.单击“应用”。
只有拥有AUDITADMIN属性的用户才有查看权限,查询格式如下:
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
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)



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




