2015-02-24 16 views
5

我想知道下面的SQL代碼是否會存儲在日誌中,所以我們可以回頭看看未來的日期,以查看用戶在查詢數據庫時鍵入了什麼?是否選擇在日誌中存儲的回滾語句中的查詢?

BEGIN TRAN 
SELECT * 
FROM pictures p 
INNER JOIN product pr 
ON p.item_id = pr.item_id 
ROLLBACK TRAN 

我認爲如果代碼被包裝在一個回滾子句中,用戶輸入的內容沒有記錄可見?

+0

十分密切的關係:是臨時存儲只讀查詢在SQL Server事務日誌?](http://stackoverflow.com/questions/5516358/are-ad-hoc-read-only-queries-stored-in-sql-server-transaction-log)。在事務中放置一個SELECT語句仍然不會將它提升到日誌。 – 2015-02-24 09:09:47

回答

1

總之,沒有。由於沒有發生數據更改,因此不需要在日誌中存儲任何內容。實際上,ROLLBACK並不重要,即使它會是COMMIT ed,仍然沒有發生數據更改,因此也沒有記錄。

DELETE,UPDATEINSERT被記錄。 SELECT不是。如果您想記錄這些查詢,您可以使用跟蹤,使用SQL Audit,構建您自己的解決方案以登錄或使用第三方產品工具。

這裏有不同的技術的一些信息:

http://solutioncenter.apexsql.com/auditing-select-statements-on-sql-server/

下面是對SQL審計的詳細信息:

http://blogs.msdn.com/b/sreekarm/archive/2009/01/05/auditing-select-statements-in-sql-server-2008.aspx

+0

會不會出現跟蹤不會選取查詢的情況? – 2015-02-24 10:59:22

+0

@Schmitz:沒有必要添加關於apexsql的信息,在與OP的問題有關的地方不需要。 OP沒有詢問有關審計的地方。在我看來,更像廣告 – Shanky 2015-02-24 11:33:45

+0

實際上,幾乎SQL Server中的所有事務都被記錄下來,唯一的情況是fn_dblog在本例中不會顯示有關select的信息。 – Shanky 2015-02-24 11:34:48

相關問題