2015-02-06 146 views
0

使用SQL 2008 R2比較記錄單SQL表

我有一個包含Windows安全事件日誌條目表。可能的事件ID是560,562和564.

這些是用戶刪除文件時創建的三個事件日誌條目。

560包含有關執行刪除的用戶,源IP,文件名等的大部分數據。但是,560不是確認刪除發生的事件。 560是對象打開事件類型。

當用戶刪除文件時,首先創建560(對象打開),然後創建562(句柄關閉),最後創建564(對象刪除)。

所有這三個事件之間的通用鏈接是句柄ID。因此,對於單個刪除您將有類似如下的內容:

EventID HandleID UserName    Event   File 
564  000015f7 NT AUTHORITY\SYSTEM Object Delete N/A 
562  000015f7 NT AUTHORITY\SYSTEM Handle Closed N/A 
560  000015f7 DOMAIN\USER   Object Open  \share\filename 

我想用戶名,並從560事件文件,但只有當有一個564瓦特/同樣的HandleID。要解決這個

回答

0

一種方法是使用子查詢:

SELECT UserName, File 
FROM YourTable 
WHERE EventID = 560 
    AND HandleID IN (
    SELECT HandleID 
    FROM YourTable 
    WHERE EventID = 564 
) 
1

有很多方法可以做到這一點。你可以使用相關子查詢:

SELECT UserName, File 
FROM EventTableNameNotProvided e1 
WHERE e1.EventID = 560 
    AND EXISTS (SELECT 1 
     FROM EventTableNameNotProvided e2 
     WHERE e2.HandleID = e1.HandleID 
      AND e2.EventID = 564) 

或自JOIN:

SELECT e1.UserName, e1.File 
FROM EventTableNameNotProvided e1 
JOIN EventTableNameNotProvided e2 
    ON e2.HandleID = e1.HandleID 
WHERE e1.EventID = 560 
    AND e2.EventID = 564 

任何一個或兩個查詢可能是用SELECT DISTINCT更加有用。這取決於你的數據。