欧美精品一区二区,体育生GAY白袜调教VIDEO,私人影院播放器,色偷偷AV老熟女色欲涩爱

?
內(nèi)容中心
按關(guān)鍵字查找
數(shù)據(jù)庫(kù)審計(jì)產(chǎn)品常見(jiàn)缺陷之(三)多語(yǔ)句無(wú)法有效分割
作者:劉曉韜 發(fā)布時(shí)間:2016-08-16

繼上期為大家介紹了有關(guān)數(shù)據(jù)庫(kù)審計(jì)產(chǎn)品長(zhǎng)SQL語(yǔ)句漏審的問(wèn)題,本期,安華金和圍繞多語(yǔ)句的有效分割分析數(shù)據(jù)庫(kù)審計(jì)產(chǎn)品常見(jiàn)缺陷。多語(yǔ)句是SQL Server上的一個(gè)特定情況。在其它的數(shù)據(jù)庫(kù)管理系統(tǒng)中,語(yǔ)句之間都有明確的分割標(biāo)識(shí);而在SQL Serve中語(yǔ)句之間可以沒(méi)有明確的分隔符。下面是一個(gè)示例:

use opencms SET NOCOUNT ON select * from opencms.opencms.CMS_LOG where 1=1 or ‘a(chǎn)’ =’b’ select * from opencms.opencms.CMS_HISTORY_PROJECTS where 1=1

在這些語(yǔ)句之間沒(méi)有類(lèi)似于 ;號(hào)這樣的明確分隔標(biāo)識(shí)符;它們實(shí)際代表了四條語(yǔ)句:

use opencms

SET NOCOUNT ON

select * from opencms.opencms.CMS_LOG where 1=1 or ‘a(chǎn)’ =’b’

select * from opencms.opencms.CMS_HISTORY_PROJECTS where 1=1

SQL Server會(huì)將這些語(yǔ)句不加分割地組織在一個(gè)數(shù)據(jù)庫(kù)通訊包中發(fā)送;對(duì)于一些專業(yè)化程度不高的數(shù)據(jù)庫(kù)審計(jì)產(chǎn)品,會(huì)將這些語(yǔ)句作為一條語(yǔ)句審計(jì)下來(lái)。有效地實(shí)現(xiàn)多語(yǔ)句分割,需要非常專業(yè)的SQL解析技術(shù)。一些簡(jiǎn)單的方法,比如用select、use 、set這樣的關(guān)鍵字來(lái)進(jìn)行語(yǔ)句分割,稍微復(fù)雜的情況就不好處理了;下面這個(gè)示例,就無(wú)法用這種簡(jiǎn)單的方法處理:

Select * from t1 where t1.col1 = 1 union select * from  t2 where t2.col1 = 1 select * from t2 where t2.col1 = 1

即使采用稍微復(fù)雜一些的技術(shù),比如正則表達(dá)式,也很難做到準(zhǔn)確切割;非專業(yè)化的數(shù)據(jù)庫(kù)審計(jì)產(chǎn)品都存在這個(gè)缺陷。 對(duì)無(wú)法準(zhǔn)確切割多語(yǔ)句的缺陷,在不同的產(chǎn)品中表現(xiàn)不同,所造成的審計(jì)問(wèn)題也不同,但大體可以總結(jié)為如下幾點(diǎn):

(1)在審計(jì)記錄中,不能準(zhǔn)確記錄下每條語(yǔ)句的SQL操作類(lèi)型,從而造成一些高危操作不能有效地被識(shí)別或告警,比如drop、truncate這些語(yǔ)句。

(2)在審計(jì)記錄中,不能準(zhǔn)確記錄下每條SQL語(yǔ)句的數(shù)據(jù)庫(kù)對(duì)象,從而造成對(duì)敏感對(duì)象的訪問(wèn)不能有效地被識(shí)別或告警。

(3)在審計(jì)記錄中,不能準(zhǔn)確地記錄每條語(yǔ)句是否執(zhí)行成功;比如多條語(yǔ)句中第一條語(yǔ)句執(zhí)行成功,后面的語(yǔ)句執(zhí)行失敗了,往往會(huì)被整體記錄為一個(gè)結(jié)果,往往記錄的結(jié)果是成功。

(4)在審計(jì)記錄中,不能準(zhǔn)確地反饋出每條語(yǔ)句造成的影響行數(shù),從而也無(wú)法觸發(fā)基于影響行的安全策略;往往記錄下來(lái)的都是第一條語(yǔ)句的影響行,其余語(yǔ)句的影響行都被忽略掉了。

下面的結(jié)果是安華金和專業(yè)的數(shù)據(jù)庫(kù)審計(jì)產(chǎn)品的執(zhí)行結(jié)果,該產(chǎn)品準(zhǔn)確實(shí)現(xiàn)了多語(yǔ)句切割,同時(shí)準(zhǔn)確審計(jì)了每條語(yǔ)句的執(zhí)行成功與否和影響行:

以上結(jié)果,根據(jù)語(yǔ)句發(fā)送的先后順序進(jìn)行了倒排顯示,同時(shí)審計(jì)了每條語(yǔ)句的操作對(duì)象、SQL語(yǔ)句、執(zhí)行成功與否,影響行數(shù)。

安華金和的數(shù)據(jù)庫(kù)審計(jì)專家準(zhǔn)備了一些用例,來(lái)幫助讀者驗(yàn)證數(shù)據(jù)庫(kù)審計(jì)產(chǎn)品能否完成多語(yǔ)句切割,是否準(zhǔn)確地審計(jì)了每條語(yǔ)句的訪問(wèn)對(duì)象、返回結(jié)果和影響行:

用例一(一個(gè)很基本的多語(yǔ)句例子)

INSERT INTO #AM_DBFILEIO(COLLECTION_TIME,TOTAL_IO_BYTES)VALUES(@CURRENT_COLLECTION_TIME,@CURRENT_TOTAL_IO_MB)

insert #t1 ( object_id, object_type, rank)

select t.relative_id, t.relative_type, 1 from #t1 t where t.relative_id not in ( select t2.object_id from #t1 t2 where not t2.object_id is null )

用例二(一個(gè)稍顯復(fù)雜點(diǎn)的,與游標(biāo)相關(guān)的多語(yǔ)句示例):

DECLARE tables_cursor CURSOR

FOR

SELECT name FROM sysobjects WHERE type = 'U'

OPEN tables_cursor

DECLARE @tablename sysname

FETCH NEXT FROM tables_cursor INTO @tablename

WHILE (@@FETCH_STATUS <> -1)

BEGIN

/* A @@FETCH_STATUS of -2 means that the row has been deleted.

There is no need to test for this because this loop drops all user-defined tables. */

EXEC ('DROP TABLE ' + @tablename)

FETCH NEXT FROM tables_cursor INTO @tablename

END

PRINT 'All user-defined tables have been dropped from the database.'

DEALLOCATE tables_cursor ;

用例三:(一個(gè)更復(fù)雜的的多語(yǔ)句示例)

SET NOCOUNT ON;

-- Check Agent Status

CREATE TABLE #TempAgentStatus (AgentStatus nvarchar(50))

IF (IS_SRVROLEMEMBER('sysadmin') > 0)

INSERT #TempAgentStatus (AgentStatus)

EXEC master..xp_servicecontrol N'QUERYSTATE',N'SQLServerAGENT' ;

ELSE

INSERT #TempAgentStatus (AgentStatus) -- sometimes this check doesn't work - there are complains on the www

SELECT 'running' FROM master.dbo.sysprocesses WHERE program_name like N'SQLAgent%Generic%Refresher%'

DECLARE @AgentRunning int;

SET @AgentRunning = 0

SELECT @AgentRunning =1 from #TempAgentStatus where CharIndex(N'running', Lower(AgentStatus)) > 0

DROP TABLE #TempAgentStatus

-- End Check Agent Status

DECLARE @can_see_all_running_jobs int;

SET @can_see_all_running_jobs = ISNULL(IS_SRVROLEMEMBER(N'sysadmin'), 0);

DECLARE @current_execution_status int;

DECLARE @job_owner sysname;

SET @job_owner = SUSER_SNAME();

CREATE TABLE #xp_results

(

job_id UNIQUEIDENTIFIER NOT NULL,

last_run_date int NOT NULL,

last_run_time int NOT NULL,

next_run_date int NOT NULL,

next_run_time int NOT NULL,

next_run_schedule_id int NOT NULL,

requested_to_run int NOT NULL, -- BOOL

request_source int NOT NULL,

request_source_id sysname COLLATE database_default NULL,

running int NOT NULL, -- BOOL

current_step int NOT NULL,

current_retry_attempt int NOT NULL,

job_state int NOT NULL

);

IF @AgentRunning = 1

BEGIN

INSERT INTO #xp_results

EXECUTE master.dbo.xp_sqlagent_enum_jobs @can_see_all_running_jobs, @job_owner;

END

SELECT DISTINCT

COUNT(1)

FROM

msdb.dbo.sysjobs_view obj LEFT OUTER JOIN msdb.dbo.sysjobservers js ON js.job_id = obj.job_id

LEFT OUTER JOIN msdb.dbo.sysjobhistory jh ON (jh.job_id = obj.job_id) AND

(jh.step_id = 0) AND

(jh.instance_id = (SELECT Max(ijh.instance_id)

FROM msdb.dbo.sysjobhistory ijh

WHERE ijh.job_id = obj.job_id))

LEFT OUTER JOIN #xp_results res on js.job_id = res.job_id

DROP TABLE #xp_results;


?
台湾三级| 高雅人妻被迫沦为玩物| 熟女俱乐部五十路六十路av| 麻豆传媒视频| 甜性涩爱在线播放| 久久99精品国产麻豆婷婷| 回复术士的重来人生| 东北大坑乱全集目录无删| 啦啦啦资源视频在线观看8| 波多野结衣电影在线观看| 国产乱码一区二区三区| 国产伦精品一区二区三区妓女| 白嫩白嫩bbwbbwbbw| 少妇性BBB搡BBB爽爽爽| 男男做a爱过程免费视频| 奇米影视首页| 国产自拍av| 亚洲av人无码激艳猛片服务器 | 中文字幕av人妻一本二本 | 国产午夜三级一区二区三| 50歳のバツ1熟女とハメ撮り| 女友的妺妺6中文字幕| 边做饭边被躁国产| av中文字幕| 丰满少妇被猛烈进入| 乳夹 震动 走绳play 调教| 十大看免费行情的软件下载| 少妇荡乳情欲办公室456视频 | 回复术士的重来人生| 试看20分钟做受| 欧美性xxxxx极品少妇| 人妻女教师耻辱の教室| 日本无码精油按摩www视频| 久久久久无码国产精品不卡| 偷拍农民工嫖妓BBBBB| 亚洲色欲啪啪久久www综合网 | 国产又猛又黄又爽| 一边摸一边抽搐一进一出视频| 啊灬用力灬啊灬啊灬啊灬a片男男| 无码成人性爽xo视频在线观看| 免费web服务器网站|