如何将Azure SQL数据库审计日志自动导入至同库中?
在Azure SQL数据库中自动查看审计日志的实现方案
已完成操作
- 在Azure SQL数据库的「Auditing」配置中,将审计目标设置为Storage账户,审计日志会自动累积到指定存储账户内。
- 进入Azure门户的对应存储账户,找到存放审计文件的容器,在「Manage ACL」中添加用户主体并赋予读写执行权限后保存。
- 可通过以下SQL语句读取指定审计文件:
SELECT * FROM sys.fn_get_audit_file('https://{Azure storage account}.blob.core.windows.net/{container}/{...path to file...}/{audit file name}.xel',null, null);
由于Azure数据库审计生成的文件名是随机的,要实现自动化导入,需借助Azure函数遍历Blob目录定位文件,再导入数据库后通过上述语句加载日志。
已尝试的方案
- 查阅微软数据库审计日志文档,未发现将数据库作为审计目标的选项;
- 尝试参考相关方案从Blob存储导入SQL数据库;
- 了解到Azure Active Directory审计日志提供API接口;
- 尝试使用微软专用SQL函数
sys.fn_xe_file_target_read_file加载审计日志; - 尝试编写连接SQL与Azure的Transact-SQL代码,但未成功。
关于直接在数据库中获取审计日志的疑问与解答
疑问
审计事件由数据库生成,为何不能直接访问内存中的日志,而非要先导入文件?
解答
审计事件会存储在无法写入数据库表的缓冲区中(该设计主要是为了避免影响数据库性能),因此无法在日志写入Blob存储前直接访问。虽然可以通过会话监控的方式重建审计日志,但实现难度较高。此外,Azure数据库审计生成的.xel(Extended Events)文件为二进制XML格式,必须借助微软提供的工具才能读取。
内容的提问来源于stack exchange,提问作者StinkySocks
相关产品推荐
相关产品推荐

