SQL語法特征技術在數據庫安全產品的應用中非常關鍵,比如數據庫防火墻(DBFirewall)需要有效撲獲SQL語句的特征,以及為了快速地對SQL語句進行策略判定,以實現數據庫防火墻的高效處理,通過SQL語法特征技術的引入能夠實現對SQL語句的重寫。
SQL語句重寫是指在不改變原語義的情況下,對數據庫防火墻捕捉到的SQL語句進行重寫,替換原語句中的參數值。
SQL重寫能夠提高管理效率和操作速度,它是一個抽象的過程,SQL重寫包括以下幾個方面:
1.除了單雙引號內的內容,小寫字母全部變?yōu)榇髮懽帜福?/p>
2.準確區(qū)分正負號和加減號;
3.將SQL語句中的數值、單引號引起的字符串各自重寫為統(tǒng)一的占位符;
4.將注釋、換行重寫為空格,將連續(xù)的空格合并為1個,去掉運算符兩端等不影響語義的空格
以如下SQL語句為例:
Select +0.25 * money,sum(id) From “testdb”.accounts
Where id = ' G1792 ' or name !=‘’/*this message come from Lisa*/
XSeure-DBF在SQL重寫的基礎上,根據SQL語法,對SQL進行了多級分類。SQL多級分類是將具有相同操作行為的不同語句合并為一類,為SQL信息的查看和策略的定制提供了便利,且SQL分類編碼操作后,易于后續(xù)的計算、操作和存儲。
SQL分類主要分為三級,分類的方向由細到粗,即二級分類是在一級分類的基礎上進行的,三級分類是在二級的基礎上進行的。
一級分類
基于目前的SQL重寫,即替換所有的可變“參數”數據為固定的“參數(例如,#)”,并且將所有謂詞全部大寫化(格式化為大寫字母)等。也就是說,一級分類的輸出是經過“重寫”后的SQL語句。
二級分類
在一級分類的基礎上,對所有的謂詞、函數、比較運算符進行編碼后,生成摘要的字符串編碼,該編碼就是SQL的二級分類碼。
三級分類
在二級分類的基礎上,對所有的謂詞比較運算符進行編碼后,生成的摘要字符串編碼,該編碼就是SQL三級分類碼。
根據SQL分類的原則,假如有如下SQL語句:
1:SELECT salary*1.5 FROM employees WHERE job_id ='PU_CLERK';
2:SELECT salary*2 FROM employees WHERE job_id='SA_MAN';
3:SELECT employee_id FROM department WHERE department_name = 'HR';
4:SELECT department_id FROM employees WHERE salary <5000;
5:SELECT sum(salary) FROM employees WHERE job_id ='PU_CLERK';
6:SELECT max(salary) FROM employees WHERE job_id='PU_CLERK';
那么按照分類碼,DBFirewall看到的分析SQL,由三級到一級如下呈現:
SELECT FROM WHERE =
SELECT FROM WHERE =
SELECT SALARY*0 FROM EMPLOYEES WHERE JOB_ID='#'
SELECT EMPLOYEE_ID FROM DEPARTMENT WHERE DEPARTMENT_NAME='#'
SELECT SUM FROM WHERE =
SELECT SUM(SALARY) FROM EMPLOYEES WHERE JOB_ID='#‘
SELECT MIN FROM WHERE =
SELECT MIN(SALARY) FROM EMPLOYEES WHERE JOB_ID='#‘
SELECT DEPARTMENT_ID FROM EMPLOYEES WHERE SALARY<0
SELECT MIN FROM WHERE <
SELECT DEPARTMENT_ID FROM EMPLOYEES WHERE SALARY<0
SQL語句格式化重寫后的結果為:
SELECT 0*MONEY,SUM(ID) FROM “testdb”.ACCOUNTS WHERE ID=’#’ OR NAME!=’’
SQL語法特征技術是數據庫通訊協議解析能力的一個關鍵技術點,這個專利性的技術已經被行業(yè)領先的數據庫安全廠商所掌握,將這項技術應用到數據庫防火墻產品中,能夠有效提高SQL解析能力,實現更為精準的危險語句攔截,提高數據庫安全性能。