【文章內(nèi)容簡(jiǎn)介】
參數(shù)情況容易產(chǎn)生匹配錯(cuò)誤,三是通過(guò)語(yǔ)句的變體容易欺騙。DBFirewall為了有效撲獲SQL語(yǔ)句的特征,以及為了快速地對(duì)SQL語(yǔ)句進(jìn)行策略判定,以實(shí)現(xiàn)數(shù)據(jù)庫(kù)防火墻的高效處理,提供了專利性的SQL語(yǔ)法特征技術(shù),實(shí)現(xiàn)了對(duì)SQL語(yǔ)句的重寫。SQL重寫是在不改變?cè)璖QL語(yǔ)句的語(yǔ)義的情況下,DBFirewall對(duì)捕捉到的SQL語(yǔ)句進(jìn)行重寫,替換原語(yǔ)句中的參數(shù)值。SQL重寫是一個(gè)抽象的過(guò)程,便于管理和操作。SQL重寫包括以下幾個(gè)方面:l 除了單雙引號(hào)內(nèi)的內(nèi)容,小寫字母全部變?yōu)榇髮懽帜?;l 準(zhǔn)確區(qū)分正負(fù)號(hào)和加減號(hào);l 將SQL語(yǔ)句中的數(shù)值、單引號(hào)引起的字符串各自重寫為統(tǒng)一的占位符;l 將注釋、換行重寫為空格,將連續(xù)的空格合并為1個(gè),去掉運(yùn)算符兩端等不影響語(yǔ)義的空格以如下SQL語(yǔ)句為例:Select + * money,sum(id) From “testdb”.accounts Where id = 39。 G1792 39。 or name !=‘’/*this message e from Lisa*/XSeureDBF在SQL重寫的基礎(chǔ)上,根據(jù)SQL語(yǔ)法,對(duì)SQL進(jìn)行了多級(jí)分類。SQL多級(jí)分類是將具有相同操作行為的不同語(yǔ)句合并為一類,為SQL信息的查看和策略的定制提供了便利,且SQL分類編碼操作后,易于后續(xù)的計(jì)算、操作和存儲(chǔ)。SQL分類主要分為三級(jí),分類的方向由細(xì)到粗,即二級(jí)分類是在一級(jí)分類的基礎(chǔ)上進(jìn)行的,三級(jí)分類是在二級(jí)的基礎(chǔ)上進(jìn)行的。l 一級(jí)分類基于目前的SQL重寫,即替換所有的可變“參數(shù)”數(shù)據(jù)為固定的“參數(shù)(例如,)”,并且將所有謂詞全部大寫化(格式化為大寫字母)等。也就是說(shuō),一級(jí)分類的輸出是經(jīng)過(guò)“重寫”后的SQL語(yǔ)句。l 二級(jí)分類在一級(jí)分類的基礎(chǔ)上,對(duì)所有的謂詞、函數(shù)、比較運(yùn)算符進(jìn)行編碼后,生成摘要的字符串編碼,該編碼就是SQL的二級(jí)分類碼。l 三級(jí)分類在二級(jí)分類的基礎(chǔ)上,對(duì)所有的謂詞比較運(yùn)算符進(jìn)行編碼后,生成的摘要字符串編碼,該編碼就是SQL三級(jí)分類碼。根據(jù)SQL分類的原則,假如有如下SQL語(yǔ)句:1:SELECT salary* FROM employees WHERE job_id =39。PU_CLERK39。2:SELECT salary*2 FROM employees WHERE job_id=39。SA_MAN39。3:SELECT employee_id FROM department WHERE department_name = 39。HR39。4:SELECT department_id FROM employees WHERE salary 5000。5:SELECT sum(salary) F