1、寫在前面
不知不覺筆記已經記錄到第10步了,對MogDB也有了初步的了解和認知,這還是要歸功于官網的中文操作手冊。中文操作手冊,這個真的是國產數據庫神器之一,在學習過程中方便了不少。希望國產數據庫生態越來越健全,路越走越寬。信創指日可待。
數據安全是一個數據庫的“基本”功能,甚至可以說如果數據庫產品的安全管理不達標,數據庫產品在監管部門都不能完成驗收,此次筆記就從數據庫認證管理、權限管理和數據庫審計出發做進一步學習測試。
2、數據庫認證管理
在前面的筆記中也接觸過pg_hba這個連接認證文件,這里在重新驗證一下這個文件,如果遠程服務器需要連接到MogDB數據庫,就必須要配置這個文件,這個文件類似于白名單,允許那些服務器可以連接到MogDB。
MogDB共有3中認證方式:第一種是基于服務器的認證;第二種是基于密碼的方式認證,第三種是基于SSL加密的方式,前兩種是我們最常用的。第一種主要是DBA通過本地維護MogDB使用,第二種認證方式主要是為了應用程序、開發人員使用。
看一下pg_hba_conf的內容。
每一行有五個值分別是TYPE、DATABASE、USER、ADDRESS、METHOD
TYPE:
Local--在本地使用gsql連接數據庫使用
Host--使用tcp/ip連接
Hostssl--使用tcp/ip連接,并且經過ssl加密
Hostnossl--使用tcp/ip連接,并且沒有經過ssl加密
DATABASE:表示可以連接到那一個數據庫,all表示所有數據庫
USER:表示可以使用那個用戶連接到數據庫,all表示所有用戶(omm初始化用戶除外)
ADDRESS:表示那些ip可以訪問數據庫
METHOD:表示使用那種認證方式訪問數據庫,常用的是trust本地gsql連接和sha256密碼加密
官網中有詳細描述,https://docs.mogdb.io/zh/mogdb/v3.0/1-client-access-authentication,我們這里主要是測試
1)測試本地gsql不指定用戶和密碼
連接數據庫發現當前使用的是用戶是初始化用戶omm,用到的是配置文件中這一行
local all all trust
2)測試本地gsql使用zkh用戶不指定密碼
提示需要數據密碼,用到的是配置文件中的這一行
host all omm 10.80.9.249/32 trust
3)測試本地gsql使用omm初始化用戶連接數據庫
并不需要密碼,說明omm用戶使用的是文件中的這一行
local all all trust
4)測試遠程連接使用如下一行
使用的是配置文件中的這一行
host all all 10.80.9.150/32 sha256
5)修改pg_hba.conf配置文件允許某個網段可以連接到數據庫
host all all 10.80.0.0/16 sha256
使用命令修改
gs_guc set -N all -I all -h "host all zkh 10.80.0.0/16 sha256" |
執行完成命里以后在pg_hba.conf中生成兩條配置信息
host all zkh 10.80.0.0/24 sha256 host all zkh 10.80.0.0/16 sha256 |
注意:無論是命令修改還是直接修改pg_hba.conf配置文件都需要重啟數據庫才會生效
其實只有host all zkh 10.80.0.0/16 sha256這一條就足夠了。
6)把遠程連接的認證方式修改成trust看一下測試結果
提示遠程連接不允許trust認證方式。
7)ssl和nossl模式就不進行測試了,官網也有很詳細的使用說明
3、用戶和權限
一、管理員分類
用戶按照功能分類分為以下幾類:
初始用戶:默認為安裝MogDB的操作系統用戶omm,擁有最高權限,可以執行所有操作。
系統管理員:具有sysadmin屬性的賬戶,類似于Oracle的dba角色,有三種方式可以給用戶賦予sysadmin權限
#創建用戶時指定 CREATE USER sysadmin WITH SYSADMIN password "xxxxxxxxx"; #為已存在用戶賦予sysadmin權限 MogDB=# ALTER USER joe SYSADMIN; #通過創建sysadmin權限的角色,然后賦給用戶 CREATE ROLE manager IDENTIFIED BY xxxxxxxxx; grant manager to user; |
監控管理員:MONADMIN具有查看dbe_perf模式下視圖和函數的權限,授權方式同系統管理。
運維管理員:OPRADMIN具有使用Roach工具執行備份恢復的權限。
安全策略管理員:POLADMIN具有創建資源標簽、脫敏策略和統一審計策略的權限。
可見MogDB的管理員也是很多,每個管理員負責的職責功能都不相同,在現實場景中可能只有一個系統管理員角色就夠了,但是在大廠可能就是分而治之了。
二、用戶分類
MogDB一個實例中可以用多個數據庫(這有點類似于Mysql)。MogDB中默認創建的用戶都是公共用戶(這有類似于Oracle CDB中的common user,與Mysql也相同),只要賦予相應的權限可以訪問所有數據庫的數據,但是要注意一點與Mysql不同的是,Mysql登錄到一個庫中可以查看其他數據庫的對象,但是MogDB不行,他只可以看到當前連接到的數據庫內容。
私有用戶,這個并不是公共用戶的反義詞,也不是Oracle CDB中的普通用戶,MogDB中的私有用戶創建的對象,系統管理員沒有權限進行dml。
永久用戶:進過測試發現永久用戶只可以使用初始用戶創建、刪除,系統管理員沒有權限刪除永久用戶,具體的使用場景暫時沒有想到。
三、權限分類
按照權限管理的顆粒度劃分大致分為一下三類:
系統級別:是在系統級別上的權限就是上面所說的各種管理員權限都屬于數據庫權限
db/Schema級別:是在數據庫基本或者schema級別上的權限,
將數據庫所有的權限賦予給指定的用戶或角色--grant all privileges on database db_name to user
將模式的訪問權限賦予指定的用戶或角色--grant all privileges on schema echame_name to user
對象級別:是在數據庫對象上的權限,比如execute、select、update
將表的所有權限賦予指定的用戶或角色--grant all privileages on table table_name to user
4、審計
官方操作手冊地址:https://docs.mogdb.io/zh/mogdb/v3.0/3-configuring-database-audit
MogDB的設計顆粒度比較多,在官網上也有明確的表示,我們這里只做測試。Oracle的設計日志可以記錄到表中,也可以記錄到文件中。MogDB采用以二進制的形式記錄到文件中,但是提供了豐富的維護功能,包括手動刪除審計日志、根據磁盤空間的大小(audit_space_limit)自動刪除審計日志、備份審計日志、查詢審計日志pg_query_audit等,操作起來還是比較快捷。
先查詢一下當前沒有修改任何默認參數的審計文件內容,因為默認的審計總開關audit_enabled是開啟的。
select * from pg_query_audit('2022-08-17 01:29:48','2022-08-18 01:29:48'); |
可以看到記錄了一些用戶登錄、用戶退出、數據庫啟動等等的系統審計。接下來測試一個表的審計功能
#開啟審計DML操作 gs_guc reload -N all -I all -c "audit_dml_state='1'" #修改數據內容 update test_flashback tf set saler=100000 where id='2'; #查詢設計內容 select * from pg_query_audit('2022-08-18 01:50:36','2022-08-18 01:52:29'); |
已經看到剛才我們執行的那條sql語句,包括客戶端IP等等,總體來說MogDB的審計功能還是比較人性化的,配合自動刪除、歸檔的功能,可以不用擔心開啟審計造成的磁盤占用太大的問題。
5、寫在最后
這次筆記了解了數據庫安全相關的一些知識點,包括認證管理、角色權限管理、審計管理;認證管理既可以配置“白名單”,也可以設置“黑名單”(通過method設置成reject),支持Unix套接字、tcp/ip、ssl、nossl4中認證類型;角色權限管理與其他數據庫管理類似,沒有可以總結的;最后測試了MogDB的審計功能,MogDB的審計顆粒度比較全,支持多種類型的數據庫操作審計,而且自動維護功能減少了我們日常的運維操作。
一步一步學習MogDB第十步了,我總是喜歡把十作為一個計數單位。一個結束,一個開始。




