Sql-Server
SQL Server 審核規範 - 按除一位使用者外的所有使用者過濾 DML
我正在設置數據庫審核。我想擷取由數據庫使用者發出的任何 DML 更改,而不是與應用程序相關的服務帳戶。
簡而言之,這是為了向我們的外部審計員證明,沒有使用者篡改應用程序之外的數據。
以下腳本設置了對所有原則都是全域的 DML 審計。
CREATE DATABASE AUDIT SPECIFICATION [OurDatabaseAuditSpec] FOR SERVER AUDIT [OurAudit] ADD (DELETE ON OBJECT::[dbo].[SensitiveData] BY [public]), ADD (INSERT ON OBJECT::[dbo].[SensitiveData] BY [public]), ADD (UPDATE ON OBJECT::[dbo].[SensitiveData] BY [public]) WITH (STATE = ON) GO
我如何著手修改此審計規範以擷取除應用程序服務帳戶所做的一切之外的所有內容?
我是否僅限於單獨指定每個原則,還是可以指定一個例外?通讀 BOL 似乎我只能列出要審核的原則 - 而不是要忽略的原則。
您不能在審計規範級別執行此操作,但您可以在伺服器審計級別執行此操作。因此,如果此審核還執行其他操作,並且您不想通過登錄過濾掉這些事件,則需要創建單獨的審核。假設您要過濾掉此服務帳戶的任何類型的所有活動,您可以執行以下操作:
ALTER SERVER AUDIT OurAudit WITH (STATE = OFF); GO ALTER SERVER AUDIT OurAudit WHERE server_principal_name <> N'service account name'; GO ALTER SERVER AUDIT OurAudit WITH (STATE = ON); GO
根據他們連接、身份驗證、可能模擬的方式以及登錄名映射到數據庫使用者的方式,您可能需要對此進行試驗並過濾
database_principal_name
或session_server_principal_name
過濾server_principal_name
. 我剛剛在 SQL Server 2012 上對此進行了測試,它似乎可以按您的預期工作。我不相信它會在 2008 或 2008 R2 上工作(與您無關,但與未來的讀者有關)。我仍然認為過濾您的大部分活動似乎是可疑的,並且不符合審計的精神。如果他們只是相信您保護服務帳戶的密碼,那麼您必須擁有相當自由放任的審核員。一定有人認識他們吧?審計師的工作是不天生信任任何人。