大數據“復活”記
655
2025-03-31
GaussDB(DWS)作為一款運行在華為云上的核心數據倉庫,客戶大量的數據存儲在DWS的數據節點中,DWS不僅擁有海量數據查詢的極致性能,在安全方面還需要有加固防護措施。
當前數據庫都是多個用戶共同訪問數據,這些數據都具有重要價值,關系到用戶的核心資產和用戶隱私,如何禁止別有用心的用戶竊取以及黑客攻擊,本課程給您提供數據的安全管理方法。
云數倉安全層層防護
云數倉外部:由華為云的云安全管理產品保駕護航。如:Anti-DDoS、DDoS、Web應用防火墻、漏洞掃描服務、企業主機安全、數據加密服務、SSL證書管理、云堡壘機等。
云數倉內部:主要通過三權分立、行級訪問控制、審計管理三種方式進行防護。這三方式結合到數據開發實際場景中,簡單可以概括為(1)誰能看?(2)能看啥?(3)看沒看? 下面我們從這三個方面一一介紹:
(1)誰能看?
通過DWS三權分立模型,將管理員分成三類:系統管理員,安全管理員和審計管理員,不存在“一手遮天”的管理員,當某個管理員密碼泄露時,使數據庫破壞降到最低。從此各司其職,安全管理員負責用戶,審計管理員負責日志審計,系統管理員負責系統運維。
管理員名稱
能否創建用戶
能否查看審計日志
是否有系統管理員權限
系統管理員
否
否
是
安全管理員
是
否
否
審計管理員
否
是
否
開啟三權分立后,對象權限變化如下表說明:
對象名稱
系統管理員
安全管理員|審計管理員
表空間
對表空間有創建、修改、刪除、訪問、分配操作的權限。
不具有對表空間進行創建、修改、刪除、分配的權限,訪問需要被賦權。
表
對所有表有所有的權限。
僅對自己的表有所有的權限,對其他用戶的表無權限。
索引
可以在所有的表上建立索引。
僅可以在自己的表上建立索引。
模式
對所有模式有所有的權限。
僅對自己的模式有所有的權限,對其他用戶的模式無權限。
函數
對所有的函數有所有的權限。
僅對自己的函數有所有的權限,對其他用戶放在public這個公共模式下的函數有調用的權限,對其他用戶放在其他模式下的函數無權限。
自定義視圖
對所有的視圖有所有的權限。
僅對自己的視圖有所有的權限,對其他用戶的視圖無權限。
系統表和系統視圖
可以查看所有系統表和視圖。
只可以查看部分系統表和視圖。
對象名稱
系統管理員
安全管理員|審計管理員
表空間
無變化
無變化。
表
權限縮小。只對自己的表有所有權限,對其他用戶放在屬于各自模式下的表無權限。
無變化。
索引
權限縮小。只可以在自己的表上建立索引。
無變化。
模式
權限縮小。只對自己的模式有所有的權限,對其他用戶的模式無權限。
無變化。
函數
權限縮小。只對自己的函數有所有的權限,對其他用戶放在屬于各自模式下的函數無權限。
無變化。
自定義視圖
權限縮小。只對自己的視圖及其他用戶放在public模式下的視圖有所有的權限,對其他用戶放在屬于各自模式下的視圖無權限。
無變化。
系統表和系統視圖
無變化。
無變化。
開啟方法:
錄GaussDB(DWS) 管理控制臺。在左側導航樹中,單擊“集群管理”。
在集群列表中,單擊指定集群的名稱,然后單擊“安全設置”,打開三權分立開關。
依次設置安全管理員用戶名、密碼、審計管理員用戶、密碼。
單擊“應用”。在彈出的“保存配置”窗口中,選擇是否勾選“立即重啟集群”,然后單擊“是”,重啟后生效。
(2)能看啥?
行級訪問控制特性是將數據庫訪問控制精確到數據表行級別,使數據庫達到行級訪問控制的能力。不同用戶執行相同的SQL查詢操作,讀取到的結果是不同的。即同一張表,不同用戶只能查看自身相關的數據信息,不能查看其他用戶的數據信息。
GaussDB(DWS)主要通過“ALTER TABLE tablename ENABLE ROW LEVEL SECURITY”語法實現行級訪問控制,示例如下:
創建用戶alice, bob, peter。
CREATE ROLE alice PASSWORD 'Gauss@123'; CREATE ROLE bob PASSWORD 'Gauss@123'; CREATE ROLE peter PASSWORD 'Gauss@123';
創建表public.all_data,包含不同用戶數據信息。
CREATE TABLE public.all_data(id int, role varchar(100), data varchar(100));
向數據表插入數據。
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');
將表all_data的讀取權限賦予alice,bob和peter用戶。
GRANT SELECT ON all_data TO alice, bob, peter;
打開行訪問控制策略開關。
ALTER TABLE all_data ENABLE ROW LEVEL SECURITY;
創建行訪問控制策略,當前用戶只能查看用戶自身的數據。
CREATE ROW LEVEL SECURITY POLICY all_data_rls ON all_data USING(role = CURRENT_USER);
查看表詳細信息。
\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: no Distribute By: HASH(id) Location Nodes: ALL DATANODES Options: orientation=row, compression=no, enable_rowsecurity=true
切換至用戶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)
切換至用戶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) 集群狀態異常,或根據業務需要,用戶可以查詢審計信息確定故障原因或定位歷史操作記錄。
配置方法:
登錄GaussDB(DWS) 管理控制臺。單擊“集群管理”。
在集群列表中,單擊指定集群的名稱,然后單擊“安全設置”。
在“審計配置”區域中,設置審計日志保留策略。
參數名
說明
審計日志保留策略
設置審計日志保留策略,支持如下兩種策略:
“空間優先”:表示當單個節點的審計日志超過1G后,將自動淘汰審計日志。
“時間優先”:表示在“審計日志最小保存時間(天)”內會保留審計日志,超過時間后,根據存儲容量限制(單個節點1G),對審計日志進行自動淘汰。
審計日志最小保存時間(天)
當“審計日志保留策略”設置為“時間優先”策略時,該參數有效。
可選天數為0~730天,默認值為90天。
根據需要設置以下操作的審計開關。
參數名
說明
審計用戶越權訪問操作
表示是否記錄用戶的越權訪問操作,默認關閉。
審計DML操作
表示是否對數據表的INSERT、UPDATE和DELETE操作進行記錄,默認關閉。
審計SELECT操作
表示是否對SELECT操作進行記錄,默認關閉。
審計存儲過程執行
表示是否在執行存儲過程和自定義函數的時候記錄操作信息,默認關閉。
審計COPY操作
表示是否對COPY操作進行記錄,默認關閉。
審計DDL操作
表示是否對指定數據庫對象的CREATE、DROP和ALTER操作進行記錄。除“Database”、“Schema”和“User”默認啟用記錄,其他默認關閉。
GaussDB(DWS) 默認還開啟了以下的關鍵審計項。
參數名
說明
關鍵審計項
記錄用戶登錄成功、登錄失敗和注銷的信息。
記錄數據庫啟動、停止、恢復和切換審計信息。
記錄用戶鎖定和解鎖功能信息。
記錄用戶權限授予和權限回收信息。
記錄SET操作的審計功能。
設置是否開啟審計日志轉儲功能。
單擊“應用”。
查看審計日志:
只有擁有AUDITADMIN屬性的用戶才有查看權限,查詢格式如下:
pg_query_audit(timestamptz startime,timestamptz endtime,audit_log)
查詢審計記錄。
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查找得到的主機名。
查詢所有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),請猛戳
EI企業智能 云小課 數據倉庫服務 GaussDB(DWS)
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。