Sql-Server
在 Azure SQL 數據庫中僅記錄一個表
我們公司已通過 ISO27001 認證。因此,我們需要記錄數據庫事件。我們採用增量方法,首先在一張表上記錄事件。
此特定表包含登錄使用者的 ID。
我們想創建日誌
- 對此表的手動數據更改(影響更改的 SQL Server 使用者的名稱,以及他/她所做的事情)
- 更改此表上數據的儲存過程。(登錄使用者的 id,影響更改的 SQL Server 使用者的名稱,以及 SQL Server 儲存過程的語句,包括參數)
- 架構更改事件(影響更改的 SQL Server 使用者的名稱,以及他/她所做的事情)
我們不需要記錄查看數據的事件。
使用 Azure SQL 時最好的方法是什麼?
以下執行緒討論了在數據庫中建構額外表和使用觸發器記錄事件的各種方法。 https://stackoverflow.com/questions/38437/how-to-track-data-changes-in-a-database-table
但是,我希望利用 Azure SQL 中可用的數據庫審核,部分原因是上述方法很容易減慢我們的數據庫速度。
我已經使用門戶設置了一個數據庫審計——它每天生成大約 1.5GB 的審計數據,這對我的目的來說是不必要的。
有沒有辦法將 Azure 數據庫審核限制為僅與一個表相關?
是的,您可以將 Azure SQL 數據庫的審核配置為過濾到單個對象,但您需要使用 Azure PowerShell 模組。你不能通過門戶來做到這一點。
下面的範例假設您已經通過門戶啟用了數據庫級別的審核。此腳本將審核操作組更改為“DATABASE_OBJECT_CHANGE_GROUP”,然後添加幾個審核操作。審計操作是您將為要審計的表指定 DML 操作的地方。您必須分別指定每個儲存過程。它只是一個逗號分隔的列表。
Set-AzSqlDatabaseAudit ` -ResourceGroupName "MyResourceGroupName" ` -ServerName "MySqlServerName" ` -DatabaseName "MyDatabaseName" ` -AuditActionGroup "DATABASE_OBJECT_CHANGE_GROUP" ` -AuditAction ` "INSERT, UPDATE, DELETE ON dbo.LoginTable BY public", ` "EXECUTE ON usp_InsertLoginTable BY public", ` "EXECUTE ON usp_DeleteLoginTable BY public"
https://docs.microsoft.com/en-us/powershell/module/az.sql/set-azsqldatabaseaudit?view=azps-7.3.0