安華金和全面適配國產(chǎn)化操作系統(tǒng)及芯片CPU
數(shù)據(jù)安全治理關(guān)鍵技術(shù)之?dāng)?shù)據(jù)庫脫敏技術(shù)詳解
數(shù)據(jù)安全治理之API監(jiān)測系統(tǒng) ,解決API接口安全問題【安華金和】
新一代數(shù)據(jù)庫脫敏技術(shù),為敏感數(shù)據(jù)建立保護(hù)盾!
數(shù)據(jù)庫脫敏系統(tǒng)與金融行業(yè)案例解讀
數(shù)據(jù)安全治理建設(shè)思路的著力點——數(shù)據(jù)安全咨詢服務(wù)【安華金和】
數(shù)據(jù)庫防火墻功能有哪些?-數(shù)據(jù)安全-安華金和
數(shù)據(jù)安全關(guān)鍵技術(shù)之?dāng)?shù)據(jù)庫脫敏技術(shù)詳解【安華金和】
中國數(shù)據(jù)安全治理落地指導(dǎo)書籍《數(shù)據(jù)安全治理白皮書5.0》正式發(fā)布(附下載)
數(shù)據(jù)庫安全審計是目前使用最為廣泛的數(shù)據(jù)庫安全技術(shù),也正因此,用戶對此項技術(shù)提出了更高的要求。影響審計結(jié)果準(zhǔn)確性的因素有很多,其中對參數(shù)化語句的精確審計是其中一個難點。
參數(shù)綁定是數(shù)據(jù)庫編程中常用的一種方法,通過這種方法,數(shù)據(jù)庫系統(tǒng)可以減少編譯次數(shù),快速執(zhí)行,提升效率,但在筆者所見到的若干數(shù)據(jù)庫審計產(chǎn)品中,在這種情況下都出了不少的錯誤。有的是漏審了語句,有的是記錄下了操作的語句,但將具體執(zhí)行時所使用的參數(shù)記錯或漏記了。
為了詳解這種情況,我們來看一下參數(shù)綁定的基本概念。我們在常規(guī)的圖形化或命令行工具中,往往都是直接寫上SQL語句,比如:
Select * from person_info where id=’12XXXXX6722’;
在這里查詢條件是身份證號碼。根據(jù)身份證號碼查詢個人信息,是一種常用功能,也是會重復(fù)使用的語句,為了提升效率,編程中可以這么寫:
String sql1=’Select * from person_info where id=?;’
PreparedStatement pStmt = testConn.getConnection().prepareStatement(sql);
pStmt.setInt(1, ’12XXXXX6722’);
pStmt.execute();
下一次再使用時,就不用再發(fā)送語句了,可以直接發(fā)送:
pStmt.setInt(1, ’22XXXXX5399’);
pStmt.execute();
對于數(shù)據(jù)庫審計系統(tǒng)而言,單純地記錄下來‘Select * from person_info where id=?’是存在缺陷的,因為你無法明確額操作人員到底訪問了哪個用戶的信息,必須明確下來具體的參數(shù)才行。
這就要求將設(shè)定的參數(shù),與Prepare的語句有效的關(guān)聯(lián),形成可視化的審計記錄展現(xiàn):
Select * from person_info where id=’12XXXXX6722’;
Select * from person_info where id=’22XXXXX5399’;
這實際上要求審計系統(tǒng)比起單純的記錄語句要完成更多的工作;其中一個重要任務(wù)的就是句柄追蹤,本質(zhì)上SQL語句的執(zhí)行過程追蹤就是句柄追蹤過程。在上面顯示的例子中,pStmt.execute(),在通訊過程中并不發(fā)送具體的語句,而僅是告知服務(wù)器要執(zhí)行哪個語句句柄,服務(wù)器端會根據(jù)內(nèi)部記錄的句柄所對應(yīng)的已經(jīng)編譯完成的SQL語句的執(zhí)行計劃,進(jìn)行語句執(zhí)行。數(shù)據(jù)庫審計要完成相應(yīng)的工作,需要執(zhí)行類似的過程,在系統(tǒng)的內(nèi)部也維護(hù)這樣的映射關(guān)系;同時由于大多數(shù)數(shù)據(jù)庫的句柄,是在會話級的,句柄是可重用的,因此在數(shù)據(jù)庫審計中還要有效地維護(hù)句柄與session的關(guān)聯(lián),以及句柄的消亡。
在句柄維護(hù)之外,另一個有挑戰(zhàn)的工作就是參數(shù)的還原。參數(shù)的還原,首要的是要明確參數(shù)所對應(yīng)的句柄;在調(diào)用pStmt.setInt(1, ’22XXXXX5399’)時,在網(wǎng)絡(luò)中發(fā)送的包,會標(biāo)明這個參數(shù)是針對哪個句柄的,是針對第幾個參數(shù)的。作為數(shù)據(jù)庫審計產(chǎn)品,需要將參數(shù)與語句進(jìn)行映射;更重要地要準(zhǔn)確地填回參數(shù)所在的位置。
上面的例子只是為了說明概念,舉了最簡單的示例,實際情況中參數(shù)的綁定情況遠(yuǎn)比這個復(fù)雜。我么將在后面的文章中展示相對復(fù)雜的實際示例,并詳細(xì)說明數(shù)據(jù)庫安全審計技術(shù)對各類參數(shù)化語句的解析原理,能夠更實際的看到數(shù)據(jù)庫審計結(jié)果的準(zhǔn)確度差異。