SQL Server Audit監控觸發器狀態

2021-09-21 03:09:46 字數 3911 閱讀 7759

原文:

sql server audit監控觸發器狀態

本文所涉及的內容(contents)

背景(contexts)

實現**(sql codes)

注意事項(attention)

疑問(questions)

參考文獻(references)

dml觸發器一般會運用在業務系統的邏輯處理上,在你對資料庫使用者許可權控制不當的時候,這些dml觸發器很可能莫名的被禁用或者刪除了,你作為資料庫管理員你想做冤大頭嘛?背黑鍋嘛?如果不想,下面給出4種解決方案:

1. 使用ddl觸發器對服務級別或者資料庫級別進行監控,可以參考文件:

sql server ddl觸發器運用

,效果如下圖所示:

(figure1:觸發器的日誌)

sql server 事件通知(event notifications)

,效果如上圖所示;

sql server 變更資料捕獲(cdc)監控表資料

4. 第四種方案就是這篇文章要講到的新特性:sql server audit,可以使用database audit specification來捕獲這些事件。

(一) 建立伺服器級別的審核,注意設定filepath為對應的路徑,顯示設定審核狀態,建立審核的時候只能是伺服器的;

use

master

go--

建立伺服器級別審核

create

server audit serveraudit

tofile (filepath =

'f:\auditlog\

', maxsize =

256mb)

with (on_failure =

continue

);go

--開啟審核

alter

server audit serveraudit

with (state =

on);

(二) 建立伺服器級別的審核規範,這裡指定相對應的audit(審核)接收、儲存跟蹤和記錄的資料,可以同時多個審核規範指向同乙個審核。

schema_object_change_group,針對架構執行 create、alter 或 drop 操作時將引發此事件。任何資料庫的任何架構發生更改時,均將引發此事件。審核操作組的其它值可以參考:

sql server 審核操作組和操作

--

建立伺服器級別審核規範

usemaster

gocreate

server audit specification schema_change

forserver audit serveraudit

add(schema_object_change_group)

with (state =

on);

go

(三) 手動產生物件更改事件

--

測試create

table dbo.testaudit(id int)go

create

trigger dbo.testaudit_trigger on

dbo.testaudit

forinsert

asbegin

select

*from

dbo.testaudit;

endgo

(四) 查詢audit的記錄,這裡針對審核serveraudit的內容進行查詢:

--

查詢select

(figure2:操作記錄)

1. 審核必須已存在,才能為它建立伺服器審核規範。 伺服器審核規範在建立之後處於禁用狀態。

2. create server audit 語句位於事務範圍內。 如果對事務進行回滾,也將對該語句進行回滾。

3. 經過審核的事件可以寫入事件日誌或審核檔案。

4. 定義審核時,將指定結果的輸出位置。 這是審核的目標位置。 審核是在禁用狀態下建立的,因此不會自動審核任何操作。 啟用審核後,審核目標將從審核接收資料,目標可以是檔案、windows 安全事件日誌或 windows 應用程式事件日誌。

5. 通過使用 windows「事件檢視器」、「日誌檔案檢視器」或 fn_get_audit_file 函式來讀取審核事件。

6. 如果在啟動審核期間出現問題,則伺服器將不會啟動。 在這種情況下,可以在命令列中使用 –f 選項來啟動伺服器。

1. 如何對*.sqlaudit這些日誌進行歸檔或者刪除內容呢?

2. 使用sys.fn_get_audit_file獲取到的event_time跟當前的時間不對應,什麼問題?

3. 使用sys.fn_get_audit_file為什麼獲取到的記錄有空的呢?如果說database_name為空到是還好解釋,因為有些操作可能是伺服器級別的,這個欄位為空到是說的過去,但是[object_name]和[statement]為什麼沒有內容呢?

(figure3:空值)

4. 如果我建立表失敗了,為什麼返回的記錄中還是顯示成功的呢?,執行下面的sql時返回了下面的錯誤資訊,但是記錄的succeeded欄位顯示為1。

--測試create

table dbo.testaudit(id int

) ; go

訊息2714,級別16,狀態6,第2 行

資料庫中已存在名為'testaudit' 的物件。

(figure4:建立表失敗)

5. audit與c2是什麼關係呢?

6. c2禁用的時候不能馬上生效,需要重啟資料庫服務,這是為什麼呢?

7. 如何修改c2日誌檔案的路徑?

解答:要想修改c2日誌檔案的路徑,那就先要知道這個預設的路徑在**?在資料庫屬性中設定資料庫的預設位置,開啟c2開關,就能把類似audittrace20130710105730.trc的檔案儲存到下圖設定的路徑當中。

(figure5:重設c2記錄檔案的儲存路徑)

8. 為什麼修改了路徑之後的顯示是這樣的?

(figure6:路徑)

使用sqlserver audit來監控觸發器的啟用、禁用情況

建立伺服器審核和伺服器審核規範

sql server 審核(資料庫引擎)

sql server 審核操作組和操作

create server audit (transact-sql)

sql 跟蹤

sql server audit (database engine)

HystirixDashboard服務監控

一 建pom org.springframework.cloud groupid spring cloud starter netflix hystrix dashboard artifactid dependency org.springframework.boot groupid spring ...

sysdig linux sysdig系統監控神器

sysdig介紹 當需要追蹤某個程序產生和接收的系統呼叫時,你可能會想到strace。你會使用什麼樣的命令列工具來監控原始網路通訊呢?如果你想到了tcpdump。而如果你碰到必須追蹤開啟的檔案的需求,可能你會使用lsof。strace tcpdump和lsof確實是必備的工具,而這也正是你為什麼應該...

grafana prometheus搭建監控系統

1.簡介 本文是基於linux centos7搭建 關於grafana的安裝,網上有很多 在 etc yum.repos.d grafana.repo配置原始檔 如果熟悉docker的同學,那就很方便了,完全不用這麼麻煩了 安裝其實很簡單 安裝完成後 systemctl start grafana ...