Sql-Server

讀取儲存在 S3 中的 SQL Server .sqlaudit 文件

  • February 4, 2022

我在 SQL Server 中設置了一個審計,將審計日誌(.sqlaudit 文件)保存到 RDS,然後我們使用標準流程將其複製到 S3。我在閱讀這些審計文件時可以找到的所有文件都使用以下查詢從 RDS 中讀取它們:

SELECT *
FROM msdb.dbo.rds_fn_get_audit_file
('D:\rdsdbdata\SQLAudit\transmitted\*.sqlaudit'
,default,default)

RDS 有一個名為 RETENTION_TIME 的 SQL Server Audit 選項設置,它允許您在從 RDS 實例中刪除文件之前指定最多 840 小時。我需要能夠更長時間地讀取審計文件,所以我正在尋找一種方法來查詢 S3 中的審計文件,而不是在其中保留它們。

一種方法可能是使用 sys.fn_get_audit_file,但我無法對連接到我的組織有權訪問的此伺服器的任何使用者執行此操作,甚至是管理員使用者。沒有一個使用者對此擁有適當的權限,我看不出有任何方式可以授予他們。

使用 S3 儲存桶中的 .sqlaudit 文件,我該如何閱讀這些文件?也許 S3 Select 可以以某種方式做到這一點,或者我忽略了另一個明顯的解決方案?

根據審計文件的格式,如果它是受支持的格式,您可以直接從 S3使用AWS Athena查詢它。如果格式不是由 AWS Athena 直接假設的,您可以使用AWS Glue進行轉換,正如SO上的一些答案所建議的那樣。

假設您具有對 S3 的讀取訪問權限……

有多種方法(例如 CloudBerry Drive、TntDrive)將 S3 掛載為驅動器號。

如果您有一個將 S3 掛載為驅動器號(適用於所有使用者)的伺服器,該伺服器還託管了一個 SQL Server 實例,您應該能夠使用 sys.fn_get_audit_file() 查詢文件。

這與S3 中查詢文件不同,因為每個文件在打開之前都需要在後台下載,但根據文件大小和網路吞吐量,它可能是可行的。AWS 中“靠近”S3 的伺服器將是有利的。

引用自:https://dba.stackexchange.com/questions/306944