程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 審計SELECT 語句的SQL Server 2008 T-SQL命令

審計SELECT 語句的SQL Server 2008 T-SQL命令

編輯:關於SqlServer

  SQL Server 2008中的SQL審計已經變成一個一流的服務器對象。正如前面一篇文章所提到的,現在你甚至可以審計一個要求使用SQL跟蹤或者在前面版本中的其它第三方產品的SELECT語句查詢。但是,雖然使用圖形用戶界面對於處理小的任務是很好的,尤其是第一次學習一些東西時,但是這樣做可能是很乏味的,尤其是如果你重復相同的任務時。這篇文章將和前面的文章一樣通過同類的Transact-SQL語句使用相同的例子。如果你想審計,我們可以假設審計在數據庫中10個或者更多的表,那麼這會使你更容易地做到。我也將使用文件系統來存儲審計對象。我們將使用CREATE SERVER AUDIT完成這個任務。  

   -- Create Server Audit object
  USE master
  CREATE SERVER AUDIT testAudit TO FILE(FILEPATH='C:TempSelectAudit')
  GO

  這個服務器審計對象負責搜集你想監測的服務器和/或者數據庫級別的行為和行為組並且在實例級別上創建。這也意味著如果你有很多實例在一個服務器上運行,那麼你要為每個實例創建服務器審計對象。接著,我們將在適當的數據庫中創建一個叫做testAudSpec的數據庫審計規范,在本例中,我們將使用AdventureWorks數據庫。我們將使用CREATE DATABASE AUDIT SPECIFICATION語句來完成這個任務。  
   -- Create an audit specification
  USE AdventureWorks
  GO
  CREATE DATABASE AUDIT SPECIFICATION testAudSpec FOR SERVER AUDIT testAudit
  ADD (SELECT ON HumanResources.Employee BY Public)
  GO

  在這裡我們所作的是只創建一個數據庫審計規范並把它分配到我們之前創建的服務器審計對象中。然後,我們增添數據庫級別的可審計的行為名稱,在本例中是SELECT語句,然後捕捉所有用戶執行的查詢。你可以有多個行為或者行為組以及相關的數據庫審計規范。你也可以創建一個服務器審計規范,它可以審計服務器級別的行為或行為組,比如跟蹤成功或失敗的登錄,更改角色成員等。SQL Server審計行為組和行為的列表可以從聯機幫助和MSCN中得到。

  由於默認情況下服務器審計對象和數據庫審計規范在創建之後都不能使用,我們需要使它們可用。要驗證它們的狀態,你可以查詢sys.server_file_audits和

  sys.database_audit_specifications系統對象。is_state_enabled字段能告訴我們它們的狀態。

   -- Verify Audit objects if turned on (1 = Enabled)
  USE master
  SELECT is_state_enabled,* FROM sys.server_file_audits
  USE AdventureWorks
  SELECT is_state_enabled,* FROM sys.database_audit_specifications
  GO

 

  要使服務器審計對象和數據庫審計規范可用,我們可以運行下面的代碼:

   -- Turn on Audit
  USE master
  ALTER SERVER AUDIT testAudit WITH (STATE=ON)
  GO
  USE AdventureWorks
  ALTER DATABASE AUDIT SPECIFICATION testAudSpec WITH (STATE=ON)
  GO

  這樣就大功告成了。我們使用Transact-SQL在SQL Server 2008中創建審計對象。我們甚至可以使用Transact-SQL讀取審計文件。  
   SELECT session_server_principal_name, statement, *
  FROM fn_get_audit_file ('C:TempSelectAudit*',NULL, NULL)

 

圖二

  我們使用fn_get_audit_file函數從我們之前在服務器審計對象中創建的審計文件中找到信息。注意我們使用一個通配符 – 星號(*)-以便傳遞產生的審計文件的文件名,因為我們不能准確地知道完整的文件名。這將會讀取我們在參數中指定的文件夾的可用審計文件。如果我們知道確切地路徑和文件名,那麼我們也能夠讀取一個指定的審計對象。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved