多表和視圖聯合查詢,實現MVM掃描任務詳細SOC Case----去重,聯合,stuff,觸發器賦權

SELECT distinct([faultline].[MVMLive].[vwScan].[JobID])
      ,[faultline].[dbo].[Users].Name
      ,[faultline].[MVMLive].[vwScan].[ConfigurationName]
      ,[faultline].[MVMLive].[vwScan].[StartTime]
      ,[faultline].[MVMLive].[vwScan].[EndTime]
       ,STUFF((select ', '+(StartIPAddressIPv4+'-'+EndIPAddressIPv4) from [faultline].[MVMLive].[vwScannedIPRange]where JobID=5 for XML path('')),1,1,'')
  FROM [faultline].[MVMLive].[vwScan]
  left join [faultline].[dbo].[Jobs]on [faultline].[dbo].[Jobs].JobID= [faultline].[MVMLive].[vwScan].JobID
  left join [faultline].[dbo].[Users]on [faultline].[dbo].[Jobs].UserID=[faultline].[dbo].[Users].UserID
  left join [faultline].[MVMLive].[vwScannedIPRange] on [faultline].[MVMLive].[vwScannedIPRange].JobID=[faultline].[MVMLive].[vwScan].[JobID]
  where [faultline].[MVMLive].[vwScan].JobID= 5 



 

以上語句涉及到的知識點:

1.distinct 查詢結果去重功能。

2.聯合查詢left join, 聯合條件不一定必須是主表的,如 [faultline].[dbo].[Jobs].UserID=[faultline].[dbo].[Users].UserID。即是說,1、2、3,不一定非得,1-2和1-3的方式聯合,也可以是,1-2和2-3的聯合。

3.視圖和表的混用,[faultline].[MVMLive].[vwScannedIPRange]就是視圖,實際使用中發現視圖的執行需要額外的權限----相關的觸發器的權限,Fslong2IP,

4.爲特定的視圖、表、觸發器、存儲過程賦權的語句 grant execute/select on Fslong2IP to arcsight

5.stuff 函數的使用,字符替換。



視圖和觸發器的概念和關係:


視圖就是查詢結果,這個結果也是以表的形式展示的。觸發器是在執行增刪改等表的操作時,額外需要執行的一些動作。猜測上邊的Fslong2IP多半是一個將16進制存儲的IP轉換成字符串的函數,這個函數並不會顯式執行,

只有當需要獲得IP字符串的時候,纔會被調用執行,這也是爲什麼arcsight賬號沒有權限執行,需要單獨對這個觸發器賦權的原因。



---------------------2015/2/10 14:14 進過多次修改和優化後的實現---------------------------------------


use faultline
go
create view jobdesIPrange as
SELECT JobID,
cast((select StartIPAddressIPv4 +'-'+EndIPAddressIPv4+ ',' from  [faultline].[MVMLive].[vwScannedIPRange] where JobID = A.jobid for XML PATH('')) as varchar(1000)) as iprange
from [faultline].[MVMLive].[vwScannedIPRange] A

group by jobid


cast--轉換爲字符串,而且指定了字符串的長度,否則默認只有30,查詢結果缺失。

xml path('')實現不同條目的統一字段的按條件拼接。有用到一種技巧,自連接條件,JobID = A.jobid。




use faultline
go
create view forsoccase as
SELECT [faultline].[MVMLive].[vwScan].[JobID]
          ,[faultline].[dbo].[Users].Name as UserName
      ,[faultline].[MVMLive].[vwScan].[ConfigurationName] as TaskName
      ,[faultline].[MVMLive].[vwScan].[StartTime]
      ,[faultline].[MVMLive].[vwScan].[EndTime]
      ,[faultline].[dbo].engines.serveraddress as ScanSource
       ,[faultline].[dbo].jobdesIPrange.iprange as ScanDestination
  FROM [faultline].[MVMLive].[vwScan]
  left join [faultline].[dbo].[Jobs]on [faultline].[dbo].[Jobs].JobID= [faultline].[MVMLive].[vwScan].JobID
  left join [faultline].[dbo].[Users]on [faultline].[dbo].[Jobs].UserID=[faultline].[dbo].[Users].UserID
  left join [faultline].[dbo].jobdesIPrange on [faultline].[dbo].jobdesIPrange.JobID=[faultline].[MVMLive].[vwScan].[JobID]
  left join [faultline].[dbo].engines on [faultline].[MVMLive].[vwScan].[EngineName]=[faultline].[dbo].engines.name
  where [faultline].[MVMLive].[vwScan].JobID > 0




use faultline
go

grant execute on Fslong2IP to arcsight




-------------------2015/2/13 11:26 -----------------------


由於系統時間是UTC 0的形式存儲於數據庫中,顯示的時間比正常時間少了8小時,修改對應字段。


      ,dateadd(hour,8,[faultline].[MVMLive].[vwScan].[StartTime]) StartTime
      ,dateadd (hour,8,[faultline].[MVMLive].[vwScan].[EndTime]) EndTime


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章