步驟1:打開SSMS,輸入以下語句,建立登陸帳戶UltraSQL,授予訪問AdventureWorks2012數據庫的Person.Person和Person.Password權限。sql
USE master GO --Create Login UltraSQL CREATE LOGIN UltraSQL WITH PASSWORD=N’Mpdfzh7’, DEFAULT_DATABASE=AdventureWorks2012, CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF GO --Create User UltraSQL In AdventureWorks2012 USE AdventureWorks2012 GO CREATE USER UltraSQL FOR LOGIN UltraSQL GO --Grant Select Privilege to Person.Person & Person.Password GRANT SELECT ON Person.Person TO UltraSQL GRANT SELECT ON Person.Password TO UltraSQL GO
步驟1:打開SSMS,登陸到指定的實例,展開「Security」,「Audits」節點。數據庫
步驟2:在「Audits」節點上,右鍵選擇「New Audit…」選項。服務器
步驟3:在「Create Audit」窗口,輸入如下的參數。ide
l 在「Audit name」輸入Audit-AdventureWorks2012-AccessTable。函數
l 在「Audit destination」選擇「File」測試
l 在「File path」輸入D:\MSSQL\DATA\Audit_logs。spa
l 取消勾選位於「Maximum rollover files」框下的「Unlimited」。3d
l 在「Number of files」輸入100。日誌
l 取消勾選位於「Maximum file size」框下的「Unlimited」。server
l 在「Maximum file size」輸入10,選擇「MB」框。
設置「Maximum file size」爲10MB,可讓每一個審覈文件的大小,維持在指定的大小以內,當此審覈文件的空間耗用完以後,將參照「Maximum rollover files」選項的設置,依據默認值,最多可保留的審覈文件數據量,可達2147483647個文件。這裏,每一個審覈文件最大可達10MB,最多可保留的文件數量是100個。
步驟4:單擊「OK」完成設置。
步驟5:右鍵點擊剛剛建立的審覈「Audit-AdventureWorks2012-AccessTable」,選擇「Enable Audit」選項。
步驟1:展開「Database」,「AdventureWorks2012」,「Security」,「Database Audit Specifications」節點。
步驟2:在「Database Audit Specifications」節點,單擊鼠標右鍵選擇「New Database Audit Specification…」選項。
步驟3:在「Create Database Audit Specification」窗口輸入如下的參數。
l 在「Name」輸入DatabaseAuditSpecification-UltraSQLAccessPerson.Password。
l 在「Audit」下拉框選擇以前建立的審覈對象Audit-AdventureWorks2012-AccessTable。
l 在「Audit Action Type」中選擇「SELECT」。
l 在「Object Class」中選擇「OBJECT」選項。
l 在「Object Name」中單擊圖表,選擇「Person.Password」選項。
l 在「Principal Name」中單擊圖表,選擇「UltraSQL」選項。
步驟4:參照步驟3,在「Action」區域的第二行部分,添加對「Audit Action Type」是「UPDATE」的監視。。以針對用戶UltraSQL查詢或是更新數據表Person.Password進行審覈。
步驟5:右鍵點擊剛剛建立的數據庫審覈規範「DatabaseAuditSpecification-UltraSQLAccessPerson.Password」,選擇「Enable Database Audit Specification」選項。
步驟1:以UltraSQL的身份,經過SSMS鏈接到AdventureWorks2012。
步驟2:使用UltraSQL帳號,對數據表Person.Password執行查詢與更新等操做。
USE AdventureWorks2012 GO SELECT * FROM Person.Password SELECT * FROM Person.Person SELECT * FROM Person.Password UPDATE Person.Password SET ModifiedDate=GETDATE() WHERE BusinessEntityID=1 /* Msg 229, Level 14, State 5, Line 1 The UPDATE permission was denied on the object 'Password', database 'AdventureWorks2012', schema 'Person'. */ SELECT * FROM Person.Password WHERE BusinessEntityID=1 SELECT a.PasswordHash,b.FirstName,b.LastName FROM Person.Password a INNER JOIN Person.Person b ON a.BusinessEntityID = b.BusinessEntityID SELECT TOP 1 * FROM Person.Password WHERE BusinessEntityID=1
步驟1:以sysadmin身份登陸實例,展開「Object Explorer」,「Security」,「Audits」節點。
步驟2:在審覈「Audit-AdventureWorks2012-AccessTable」上單擊右鍵,選擇「View Audit Logs」。
步驟3:在「Log File Viewer」窗口的左側,選擇「Audit Collection」,「Audit-AdventureWorks2012-AccessTable」,並利用如下的方式來閱讀所記錄的審覈信息。
l 在右邊的「Log file summary」區域內,在「Action ID」框下,單擊「SELECT」操做類型的數據行日誌。
l 在下方的「Database Principal Name」區域,能夠看到所記錄的數據庫用戶。在「Statement」區域能夠看到所記錄的程序代碼。
有個特別的現象,整理以下。
l 以執行UPDATE語句爲例,將會引起SELECT與UPDATE等兩個「Action ID」行爲,也將會產生兩筆審覈日誌,所記錄下來的數據除了在「Action ID」區域是不一樣的以外(一個是SELECT,一個是UPDATE),其他部分都同樣。此外,即使是用戶UltraSQL沒有權限能夠修改數據表,這些行爲也將被審覈對象所記錄,但在「Succeeded」區域部分日誌爲False。
步驟1:利用sysadmin身份,執行SSMS,輸入以下查詢語句,使用sys.dm_server_audit_status動態管理視圖來查看各個審覈對象的當前狀態。
USE master GO SELECT audit_id N'Audit ID', name N'Audit Name', status_desc N'Server Audit Status', Status_time N'Last Status Changed Timestamp', audit_file_size N'Audit File Size', Audit_file_path N'Audit File Full Path' FROM sys.dm_server_audit_status;
l 數據行status_desc(服務器審覈狀態):查看各個審覈對象是否已經啓用。
l 數據行audit_file_size(審覈文件大小(KB)):查看以二進制文件爲目標的審覈文件,其所使用的空間,以KB爲單位;若非二進制文件,例如:以「Windows應用程序事件日誌文件」來存放的審覈日誌,則會顯示NULL。
l 數據行audit_file_path(審覈文件目標的完整路徑名稱):查看以二進制文件爲目標的審覈文件,其所在的完整路徑與文件名。
步驟2:單擊「New Query」,執行以下代碼,使用函數fn_get_audit_file分析審覈文件
--EX1 Query the Audit File /* Fn_get_audit_file (Transact-SQL) fn_get_audit_file(file_pattern, {default | initial_file_name | NULL },{default | audit_file_offset | NULL}) Param:file_pattern Set the Audit File Full Path. */ SELECT * FROM sys.fn_get_audit_file(N’ D:\MSSQL\DATA\Audit_logs\Audit-Login-Create%9Alter%9Drop_AF3AAECB-30CC-4476-9395-8754E60E356C_0_130639659785910000.sqlaudit’,default,default); --EX2 Using * Query some Audit Files created by the same audit object SELECT * FROM sys.fn_get_audit_file(N’ ’ D:\MSSQL\DATA\Audit_logs\Audit-Login-Create%9Alter%9Drop_*.sqlaudit’,default,default); --EX3 attention: event_time type is datetime2,stored GMT SELECT event_time N’Audit caused Date & Time(GMT)’, server_principal_name N’Login’, Database_principal_name N’User’, database_name N’Database’, object_name N’Object Name’, statement N’TSQL’ FROM sys.fn_get_audit_file(N’ ’ D:\MSSQL\DATA\Audit_logs\Audit-Login-Create%9Alter%9Drop_*.sqlaudit’,default,default); --EX4 Convert to Timezone Bejing(GMT+08:00) using data type datetimeoffset & Function SWITCHOFFSET) SELECT SWITCHOFFSET(CAST(event_time AS datetimeoffset),’+08:00’) N’Audit Action caused date & time(Timezone Bejing GMT+08:00)’, Server_principal_name N’Login’, database_principal_name N’User’, Database_name N’Database’, object_name N’Object Name’, statement N’TSQL’ FROM sys.fn_get_audit_file(N’ ’ D:\MSSQL\DATA\Audit_logs\Audit-Login-Create%9Alter%9Drop_*.sqlaudit’,default,default); --EX5 Import all audit files in the directory into system SELECT * FROM sys.fn_get_audit_file(N’ ’ D:\MSSQL\DATA\Audit_logs\*’,default,default); --EX6 Convert to Timezone Bejing(GMT+08:00) using data type datetimeoffset & Function SWITCHOFFSET) SELECT SWITCHOFFSET(CAST(event_time AS datetimeoffset),’+08:00’) N’Audit Action caused date & time(Timezone Bejing GMT+08:00)’, Server_principal_name N’Login’, database_principal_name N’User’, Database_name N’Database’, object_name N’Object Name’, statement N’TSQL’ FROM sys.fn_get_audit_file(N’ ’ D:\MSSQL\DATA\Audit_logs\*’,default,default);
說明:
l 在EX1部分中函數fn_get_audit_file的第一個變量,更換爲執行sys.dm_server_audit_status後,取得字段audit_file_path的值部分,或是填入完整的審覈文件的文件名。在第二個和第三個變量,填入default,採起默認值便可。
l 若要將同一個審覈對象所產生的多個審覈文件,都加載到系統內進行分析,能夠在文件名上,搭配使用通配符*,參考EX2代碼。
l 審覈所記錄的日期時間是格林威治時間(GMT),數據類型爲datatime2,能夠轉換成數據類型datetimeoffset,並利用函數SWITCHOFFSET,將此數據改以北京時區(GMT+08:00)的格式來顯示,參考EX3和EX4。
l 若須要將指定文件夾內的各個審覈文件,都加載到系統內進行分析,能夠搭配通配符*,參考EX5和EX6。
步驟1:在D:\MSSQL\DATA\Audit_logs內建立新的文件夾Archive_Audit。
步驟2:打開文件夾D:\MSSQL\DATA\Audit_logs,複製此文件夾內的審覈文件(*.sqlaudit)到文件夾D:\MSSQL\DATA\Audit_logs內,此爲簡易備份審覈文件的方式。
步驟3:若要刪除已經備份過的審覈文件,請先確認此審覈對象已經禁用。不然,正在使用的審覈文件將將沒法刪除。