SQL Server 審覈(Audit)-- 審覈對數據庫對象的訪問

SQL Server 審覈(Audit)-- 審覈對數據庫對象的訪問

 

任務1:建立登陸帳戶,授予適當的權限


步驟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

 

 

任務2:建立審覈


步驟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個。

 

clip_p_w_picpath001

 

步驟4單擊「OK」完成設置。

 

步驟5右鍵點擊剛剛建立的審覈「Audit-AdventureWorks2012-AccessTable」,選擇「Enable Audit」選項。

 

 

任務3:建立訪問數據表的審覈


步驟1展開「Database」,「AdventureWorks2012」,「Security」,「Database Audit Specifications」節點。

 

clip_p_w_picpath002

 

步驟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」選項。

 

clip_p_w_picpath003

 

 

步驟4參照步驟3,在「Action」區域的第二行部分,添加對「Audit Action Type」是「UPDATE」的監視。。以針對用戶UltraSQL查詢或是更新數據表Person.Password進行審覈。

 

clip_p_w_picpath004

 

步驟5右鍵點擊剛剛建立的數據庫審覈規範「DatabaseAuditSpecification-UltraSQLAccessPerson.Password」,選擇「Enable Database Audit Specification」選項。

 

 

任務4:測試審覈功能


步驟1:以UltraSQL的身份,經過SSMS鏈接到AdventureWorks2012。

 

clip_p_w_picpath005

 

步驟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

 

 

任務5:使用「Log File Viewer」,閱讀審覈日誌


步驟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」區域能夠看到所記錄的程序代碼。

 

clip_p_w_picpath006

 

有個特別的現象,整理以下。

l 以執行UPDATE語句爲例,將會引起SELECT與UPDATE等兩個「Action ID」行爲,也將會產生兩筆審覈日誌,所記錄下來的數據除了在「Action ID」區域是不一樣的以外(一個是SELECT,一個是UPDATE),其他部分都同樣。此外,即使是用戶UltraSQL沒有權限能夠修改數據表,這些行爲也將被審覈對象所記錄,但在「Succeeded」區域部分日誌爲False。

 

clip_p_w_picpath007

 

 

任務6:使用T-SQL函數來分析、篩選審覈的日誌數據


步驟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;

 

clip_p_w_picpath008

 

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。

 

 

任務7:審覈文件的歸檔存放


步驟1在D:\MSSQL\DATA\Audit_logs內建立新的文件夾Archive_Audit。

 

步驟2打開文件夾D:\MSSQL\DATA\Audit_logs,複製此文件夾內的審覈文件(*.sqlaudit)到文件夾D:\MSSQL\DATA\Audit_logs內,此爲簡易備份審覈文件的方式。

 

步驟3若要刪除已經備份過的審覈文件,請先確認此審覈對象已經禁用。不然,正在使用的審覈文件將將沒法刪除。

相關文章
相關標籤/搜索