摘要:數(shù)據(jù)庫是重大災(zāi)害應(yīng)急智慧服務(wù)平臺的重要組成部分,但數(shù)據(jù)庫管理工作存在諸多問題,主要表現(xiàn)為缺乏權(quán)限監(jiān)管、賬號共用、數(shù)據(jù)泄露等。為了強(qiáng)化數(shù)據(jù)庫的安全性,監(jiān)管運(yùn)維管理人員的數(shù)據(jù)庫操作行為,文章基于MySQL通信協(xié)議,針對國內(nèi)廣泛應(yīng)用的MySQL數(shù)據(jù)庫開發(fā)設(shè)計(jì)運(yùn)維代理系統(tǒng)。該系統(tǒng)的重點(diǎn)設(shè)計(jì)內(nèi)容包括系統(tǒng)整體架構(gòu)、功能需求、通信協(xié)議的解析方式以及高危SQL命令的識別方法。該系統(tǒng)的主要功能涵蓋權(quán)限配置、安全認(rèn)證、監(jiān)控審計(jì)。經(jīng)過測試,在滿足各項(xiàng)功能的前提下,數(shù)據(jù)庫運(yùn)維代理系統(tǒng)顯示出良好的響應(yīng)速度和高危SQL命令識別效率,能夠達(dá)到設(shè)計(jì)預(yù)期。
關(guān)鍵詞:數(shù)據(jù)庫代理;MySQL協(xié)議;SQL語句識別處理;數(shù)據(jù)脫敏
中圖分類號:TP311 "文獻(xiàn)標(biāo)志碼:A
0 引言
空天地一體協(xié)同災(zāi)害應(yīng)急智慧服務(wù)平臺是重大的科研項(xiàng)目,在防災(zāi)減災(zāi)方面發(fā)揮著關(guān)鍵作用。該服務(wù)平臺對數(shù)據(jù)庫的安全提出了嚴(yán)格要求,須要設(shè)計(jì)數(shù)據(jù)庫運(yùn)維代理系統(tǒng),監(jiān)管運(yùn)維管理人員對數(shù)據(jù)庫的操作行為,以便及時(shí)切斷危險(xiǎn)會話。MySQL通信過程涵蓋多種用戶操作信息,可通過解析MySQL通信協(xié)議,提取用戶操作信息,為代理系統(tǒng)提供數(shù)據(jù)源。此次研究的預(yù)期成果為建立有效的數(shù)據(jù)庫運(yùn)維代理系統(tǒng),解決不規(guī)范的數(shù)據(jù)庫操作問題。
1 數(shù)據(jù)庫運(yùn)維管理存在的問題
1.1 問題提出
重大災(zāi)害應(yīng)急智慧服務(wù)平臺對數(shù)據(jù)庫的安全性提出了較高的要求,數(shù)據(jù)庫運(yùn)維管理人員具有較大的操作權(quán)限,不規(guī)范的操作行為將導(dǎo)致數(shù)據(jù)安全風(fēng)險(xiǎn)增加。鑒于此,研究人員應(yīng)設(shè)計(jì)開發(fā)數(shù)據(jù)庫運(yùn)維代理系統(tǒng),借助該系統(tǒng)對數(shù)據(jù)庫運(yùn)維人員的操作行為進(jìn)行監(jiān)管。
1.2 問題分析
數(shù)據(jù)庫系統(tǒng)常見的安全隱患包括敏感信息泄露、數(shù)據(jù)誤刪除、登錄密碼泄漏、缺乏權(quán)限控制。運(yùn)維管理人員的權(quán)限通常高于普通用戶,能夠訪問前端、后端以及系統(tǒng)數(shù)據(jù)庫,在缺乏監(jiān)管的情況下,有可能出現(xiàn)未設(shè)置訪問權(quán)限、共用登錄賬號、執(zhí)行危險(xiǎn)操作等現(xiàn)象。數(shù)據(jù)庫運(yùn)維代理系統(tǒng)用于記錄數(shù)據(jù)庫操作信息,涵蓋登錄人員的賬號名稱、登錄賬號的IP地址、執(zhí)行的SQL命令,可通過該系統(tǒng)攔截危險(xiǎn)會話、配置運(yùn)維人員的數(shù)據(jù)庫操作權(quán)限。一旦發(fā)生數(shù)據(jù)庫安全事故時(shí),就可以借助歷史數(shù)據(jù)判斷事故原因和責(zé)任人。
2 基于MySQL協(xié)議的數(shù)據(jù)庫運(yùn)維代理系統(tǒng)設(shè)計(jì)
2.1 系統(tǒng)功能需求分析
針對數(shù)據(jù)庫運(yùn)維管理中存在的問題,數(shù)據(jù)庫運(yùn)維代理系統(tǒng)應(yīng)具備以下核心功能。
2.1.1 安全認(rèn)證
當(dāng)一個(gè)數(shù)據(jù)庫具有多個(gè)操作權(quán)限時(shí),一旦出現(xiàn)誤操作或者數(shù)據(jù)泄露,則難以認(rèn)定導(dǎo)致風(fēng)險(xiǎn)的責(zé)任人。安全認(rèn)證機(jī)制為每一個(gè)登錄數(shù)據(jù)庫的用戶分配固定的IP地址,當(dāng)用戶操作數(shù)據(jù)庫時(shí),服務(wù)器通過日志功能自動記錄操作人的IP地址,從而實(shí)現(xiàn)安全監(jiān)管。
2.1.2 運(yùn)維管控
在傳統(tǒng)的管理模式下,數(shù)據(jù)庫運(yùn)維管理難以做到實(shí)時(shí)性。針對該問題,要求數(shù)據(jù)庫運(yùn)維代理系統(tǒng)能夠準(zhǔn)確解析MySQL協(xié)議,當(dāng)用戶的操作行為存在安全風(fēng)險(xiǎn)時(shí),該系統(tǒng)可進(jìn)行自主攔截,達(dá)到實(shí)時(shí)防護(hù)的目的。
2.1.3 審計(jì)監(jiān)控
在數(shù)據(jù)庫升級和硬件設(shè)備檢修階段,通常須要擴(kuò)展操作人員的權(quán)限,升級改造過程有可能涉及高危的操作行為。監(jiān)控審計(jì)功能用于該場景下的實(shí)時(shí)監(jiān)控,當(dāng)發(fā)現(xiàn)違規(guī)操作行為時(shí),立即退出該用戶的登錄狀態(tài)。
2.1.4 配置管理
配置管理功能用于為設(shè)備、用戶、賬號分配權(quán)限和資源,具體包括人員管理、設(shè)備管理和策略管理3個(gè)子模塊。
2.1.5 性能需求
作為一款Web操作系統(tǒng),其性能應(yīng)滿足使用要求,涵蓋并發(fā)性、訪問響應(yīng)速度、穩(wěn)定性和易用性。以并發(fā)性為例,當(dāng)較多的用戶在同一時(shí)段集中訪問該系統(tǒng)時(shí),系統(tǒng)應(yīng)具備高并發(fā)響應(yīng)能力。
2.2 系統(tǒng)整體設(shè)計(jì)
2.2.1 總體架構(gòu)
系統(tǒng)整體架構(gòu)(如圖1所示)包括3個(gè)部分,分別為前后端管理界面、服務(wù)器和客戶端,程序代碼部署在服務(wù)器上。該系統(tǒng)以運(yùn)維管控模塊為核心,包含安全認(rèn)證、配置管理以及監(jiān)控審計(jì)功能的訪問入口。安全認(rèn)證涵蓋登錄認(rèn)證和代理認(rèn)證2個(gè)子模塊,監(jiān)控審計(jì)頁面設(shè)置運(yùn)維監(jiān)控、會話切斷、審計(jì)分析3個(gè)子模塊。配置管理頁面涵蓋人員、設(shè)備及策略管理3個(gè)子模塊[1]。
2.2.2 系統(tǒng)服務(wù)器集群設(shè)計(jì)
數(shù)據(jù)庫運(yùn)維代理系統(tǒng)須要同時(shí)為較多的用戶提供服務(wù),為了提高并發(fā)能力,系統(tǒng)服務(wù)器采用集群設(shè)計(jì)方案。該集群包括3個(gè)服務(wù)器,以輪詢的方式響應(yīng)客戶端的訪問請求。數(shù)據(jù)庫運(yùn)維代理模塊屬于目標(biāo)數(shù)據(jù)庫服務(wù)器和客戶端的中間層,集群服務(wù)器以串聯(lián)方式進(jìn)行部署。
2.3 MySQL通信協(xié)議解析過程
2.3.1 MySQL通信過程
MySQL的通信過程發(fā)生于客戶端和數(shù)據(jù)庫之間,但通信過程須要經(jīng)過服務(wù)器,整體的通信流程為:TCP三次握手→登錄認(rèn)證→獲得認(rèn)證→執(zhí)行命令→返回結(jié)果→退出。以MySQL5.6協(xié)議為例,在握手初始化、登錄認(rèn)證、命令請求、結(jié)果響應(yīng)過程中,均可產(chǎn)生相應(yīng)的報(bào)文[2]。
(1)命令請求報(bào)文。
當(dāng)客戶端向服務(wù)器發(fā)送請求時(shí),可產(chǎn)生請求頭和報(bào)文,報(bào)文中存在一系列命令,命令與MySQL的關(guān)聯(lián)函數(shù)如表1所示。
(2)服務(wù)器響應(yīng)報(bào)文。
當(dāng)客戶端的請求在后端執(zhí)行之后,服務(wù)器以報(bào)文的形式做出響應(yīng),返回請求執(zhí)行的結(jié)果。響應(yīng)報(bào)文分為多種類型,分別用于描述執(zhí)行正確、執(zhí)行出錯、返回結(jié)果集等信息,響應(yīng)報(bào)文分類信息如表2所示。
2.3.2 MySQL通信協(xié)議解析方法
(1)解析內(nèi)容存儲。
數(shù)據(jù)庫運(yùn)維代理系統(tǒng)屬于客戶端和數(shù)據(jù)庫服務(wù)器的中間層,握手協(xié)商報(bào)文、命令請求報(bào)文和數(shù)據(jù)庫的響應(yīng)報(bào)文均由數(shù)據(jù)庫運(yùn)維代理系統(tǒng)進(jìn)行解析。通過協(xié)議解析,可獲得客戶端的IP地址、MAC地址、端口號,同時(shí)獲取數(shù)據(jù)庫賬號、名稱、SQL語句以及SQL語句的執(zhí)行狀態(tài)[3]。代理系統(tǒng)根據(jù)數(shù)據(jù)結(jié)構(gòu)對解析得到SQL語句進(jìn)行存儲,數(shù)據(jù)結(jié)構(gòu)如下。
struct SQL_PACKET
{
unsigned int client_address;/*客戶端IP地址*/
unsigned int client_mac;/*客戶端MAC地址*/
unsigned short client_port;/*客戶端端口*/
char* db_user;/*數(shù)據(jù)庫賬號*/
char* db_name;/*數(shù)據(jù)庫名稱*/
char*sql;/*執(zhí)行的SQL語句*/
unsigned int statement;/*SQL語句處理狀態(tài)*/
}
(2)MySQL通信協(xié)議的密碼認(rèn)證方式。
MySQL通信協(xié)議的解析過程基于子進(jìn)程,完整的子進(jìn)程運(yùn)行流程為:獲取MySQL客戶端連接請求→判斷MySQL通信協(xié)議版本→密碼加密→與MySQL目標(biāo)服務(wù)器建立連接→獲得MySQL客戶端操作請求→通過SQL語句進(jìn)行命令過濾→轉(zhuǎn)發(fā)請求至MySQL的目標(biāo)服務(wù)器→將服務(wù)器的響應(yīng)結(jié)果返回至MySQL客戶端→結(jié)束運(yùn)維操作。
密碼加密屬于MySQL通信協(xié)議解析的關(guān)鍵環(huán)節(jié),加密方法可采用式(1)和式(2)表示。
phash=sha(p)(1)
其中,sha(·)代表加密函數(shù),在MySQL5.6中采用sha1加密算法,在更高版本的MySQL中采用sha256加密算法;p表示用戶的數(shù)據(jù)庫密碼。設(shè)為密碼經(jīng)過哈希處理后的結(jié)果,符號⊕代表對兩側(cè)的字符串進(jìn)行異或邏輯運(yùn)算。最終的加密結(jié)果見式(2)。
pauth=phashsha(s)+sha(phash)(2)
其中,s為隨機(jī)打亂的一個(gè)字符串,pauth為最終的加密結(jié)果。
當(dāng)服務(wù)器端接收到客戶端發(fā)送的密碼后,按照式(3)和式(4)進(jìn)行解密。如果2個(gè)表達(dá)式的計(jì)算結(jié)果一致,則驗(yàn)證成功[4]。
pcheck=sha(pauthsha(s+pstore))(3)
其中,pcheck表示pauth經(jīng)過哈希運(yùn)算的結(jié)果,pstore為服務(wù)器的存儲密碼經(jīng)過2次哈希運(yùn)算的結(jié)果,計(jì)算方法見式(4)。當(dāng)pcheck=pstore時(shí),密碼驗(yàn)證成功。
pstore=sha(sha(p))(4)
2.4 高危SQL語句識別
高危SQL語句識別的流程為:SQL語句→詞法分析→語法分析→將SQL語句識別成自然語言→SQL語句記錄文件。
2.4.1 詞法分析
在詞法分析階段,關(guān)鍵在于識別SQL語句中的各種標(biāo)識符。在語句“select colum from table”中,關(guān)鍵標(biāo)識符為“select”“colum”“table”,其含義是從table數(shù)據(jù)表中查詢(select)出colum字段。MySQL數(shù)據(jù)庫設(shè)計(jì)有完善的詞法規(guī)則,數(shù)據(jù)庫根據(jù)該詞法規(guī)則解析SQL語句。
2.4.2 語法分析
經(jīng)過詞法分析,1個(gè)SQL語句可轉(zhuǎn)化為若干個(gè)token,形成1個(gè)token流。MySQL數(shù)據(jù)庫運(yùn)用YACC語法分析器解析SQL語句所產(chǎn)生的token流,從而建立抽象語法樹[5]。語法樹生成之后,判斷其結(jié)構(gòu)是否正常:若為正常結(jié)構(gòu),則停止命令識別;若為異常結(jié)構(gòu),則識別高危SQL命令,切斷危險(xiǎn)會話。
3 系統(tǒng)性能測試
3.1 搭建測試環(huán)境
研究過程基于以上設(shè)計(jì)方案開發(fā)數(shù)據(jù)庫運(yùn)維代理系統(tǒng),數(shù)據(jù)庫版本為MySQL-5.6.47。編程語言為Java,服務(wù)器采用Nginx,代理服務(wù)器系統(tǒng)的運(yùn)行環(huán)境為Centos,客戶端采用Windows操作系統(tǒng)。服務(wù)器的硬件配置為64 GB運(yùn)行內(nèi)存,CPU為8核。
3.2 性能測試數(shù)據(jù)及結(jié)果分析
3.2.1 數(shù)據(jù)庫服務(wù)響應(yīng)速度測試
數(shù)據(jù)庫服務(wù)響應(yīng)速度測試分為2種情況。在第一種情況下,客戶端不經(jīng)過數(shù)據(jù)庫運(yùn)維代理系統(tǒng),直接請求MySQL。在第二種情況下,客戶端通過數(shù)據(jù)庫運(yùn)維代理系統(tǒng)訪問MySQL。對比2種情況下的數(shù)據(jù)庫響應(yīng)時(shí)間,結(jié)果如表3所示。由表中數(shù)據(jù)可知,開啟數(shù)據(jù)庫運(yùn)維代理系統(tǒng)之后,數(shù)據(jù)庫的平均響應(yīng)時(shí)間有所延長,但整體延時(shí)非常短,未超過1 ms。說明此次設(shè)計(jì)的數(shù)據(jù)庫運(yùn)維代理系統(tǒng)并未明顯增加響應(yīng)延時(shí),數(shù)據(jù)庫依然具有良好的響應(yīng)速度。
3.2.2 高危SQL命令識別效率測試
識別高危SQL命令是運(yùn)維代理系統(tǒng)的重要功能,由于高危SQL命令識別過程較為復(fù)雜,在一定程度上增加了SQL識別的時(shí)間成本,故對其識別效率進(jìn)行測試。
高危SQL命令識別測試分5次進(jìn)行,每次的高危命令數(shù)量分別為10、25、50、75、100條,檢測執(zhí)行時(shí)間結(jié)果如表4所示。由表中數(shù)據(jù)可知,系統(tǒng)響應(yīng)耗時(shí)與高危命令的數(shù)量呈正相關(guān)。當(dāng)命令從10條增加至100條時(shí),平均執(zhí)行時(shí)間僅延長了0.38 ms,說明識別效率較高。
4 結(jié)語
此次設(shè)計(jì)的數(shù)據(jù)庫運(yùn)維代理系統(tǒng)分為3層,包括數(shù)據(jù)庫層、代理系統(tǒng)層和客戶端層,核心功能為安全認(rèn)證、配置管理、運(yùn)維管理、審計(jì)管理,對并發(fā)性能、響應(yīng)速度提出了一定的要求。代理系統(tǒng)的服務(wù)器采用集群設(shè)計(jì)方案,以滿足高并發(fā)需求。
MySQL通信協(xié)議解析以握手報(bào)文、請求報(bào)文、響應(yīng)報(bào)文為依據(jù),從報(bào)文中識別用戶IP地址、MAC地址、高危SQL命令、端口以及用戶訪問的數(shù)據(jù)庫信息,包括庫名稱、表名稱、字段等。數(shù)據(jù)庫運(yùn)維代理系統(tǒng)通過解析MySQL通信過程,獲取重要的安全信息,據(jù)此管控運(yùn)維管理人員的操作行為。
經(jīng)過性能測試,在實(shí)現(xiàn)以上功能的前提下,開啟代理系統(tǒng)增加了數(shù)據(jù)庫服務(wù)的響應(yīng)耗時(shí),但增幅微小。數(shù)據(jù)庫運(yùn)維代理系統(tǒng)對高危SQL命令具有較高的識別效率,顯示出良好的實(shí)用性。利用該系統(tǒng)監(jiān)管數(shù)據(jù)庫運(yùn)維管理人員的操作行為可有效降低數(shù)據(jù)庫的安全風(fēng)險(xiǎn),從而解決數(shù)據(jù)庫運(yùn)維管理中存在的問題。
參考文獻(xiàn)
[1]嚴(yán)代彪,樸銀玥.數(shù)據(jù)中心智能運(yùn)維管理方案設(shè)計(jì)[J].計(jì)算機(jī)與網(wǎng)絡(luò),2021(6):38-41.
[2]楊鑫.基于代理的Java數(shù)據(jù)庫連接池設(shè)計(jì)研究[J].信息記錄材料,2024(1):160-162.
[3]陳國,白國濤,張春,等.對象代理數(shù)據(jù)庫中多路徑跨類查詢優(yōu)化[J].中國新通信,2022(19):28-32.
[4]謝振華.基于分布式的數(shù)據(jù)庫分庫與分表策略研究[J].電腦知識與技術(shù),2020(14):60,62.
[5]姬渭孟,于雪蓮.基于數(shù)據(jù)庫代理實(shí)現(xiàn)數(shù)據(jù)庫分表、分庫訪問的方案研究[J].數(shù)字通信世界,2019(9):238.
(編輯 王永超編輯)
Design of database operation and maintenance agent system based on MySQL protocol
LIU" Dingli1, XU" Guilin2, YANG" Yue1, YU" Xian1*
(1.Guangxi Vocational and Technical College of Natural Resources, Nanning 532100, China; 2. Nanning Normal University, Nanning 532100, China)
Abstract: The database is an important component of the major disaster emergency intelligent service platform, but there are many problems in database management, mainly manifesting as lack of permission supervision, account sharing, data leakage, etc. In order to enhance the security of the database and regulate the database operation behavior of operation and maintenance management personnel, based on the MySQL communication protocol, this paper develops and designs an operation and maintenance agent system for the widely used MySQL database in China. The key design content includes the overall system architecture, functional requirements, communication protocol parsing methods, and identification methods for high-risk SQL commands. The main functions of this system include permission configuration, security authentication, and monitoring and auditing. After testing, under the premise of meeting various functions, the database operation and maintenance agent system shows good response speed and efficiency in identifying high-risk SQL command,which can meet the design expectation.
Key words: database agent; MySQL protocol; SQL statement recognition processing; data desensitization