我启动了对Server 2016站点的审计。
版本I SP1 CU3,企业版。
使用此查询:
SELECT * FROM sys.server_file_audits我得到log_file_path: O:\auditfiles\
在logins_3D6DA4C0-B388-4175-88A5-D2820733CFB7.sqlaudit :log_file_name中
但当我问:
SELECT * FROM sys.fn_get_audit_file ('O:\auditfiles\logins_3D6DA4C0-B388-4175-88A5-D2820733CFB7.sqlaudit',default,default);它什么也不回。
在文件系统上检查文件的真实名称是:
logins_3D6DA4C0-B388-4175-88A5-D2820733CFB7_0_131451051332700000.sqlaudit
其中,文件名部件_0_131451051332700000不能从sys架构的查询中检索。
当我用正确的文件名进行选择时,就会得到结果。
我需要自动化这一点,以便从外部查询收集数据。
如何检索正确的文件名?
发布于 2017-08-01 11:18:53
查看sys.server_文件_审计的文档,log_file_name是(突出显示我的)
创建审核DDL中提供的日志文件的基本名称。将增量数字作为后缀添加到base_log_name文件中,以创建日志文件名。
根据创建sqlaudit文件的速度,很难确定“当前”审计文件是什么。
如果您希望快速地一次性选择审计信息,可以使用“*.sqlaudit”的通配符来读取目录中的所有文件。
SELECT * FROM sys.fn_get_audit_file ('O:\auditfiles\logins*.sqlaudit',default,default);读取当前正在写入的sqlaudit文件带来了挑战,因为行可以在您刚刚读取之后立即写入该活动文件,因此如果不继续选择它们,您可能会错过未来的审计行。此外,请注意,审计文件将继续写入您的目录路径,并且通配符选择将运行越来越长的时间,除非您实现了sqlaudit文件的某种修剪过程。
如果您的目的是跟踪和保存这些审计信息,我建议实现一个类似于我给出的“如何从服务器审核文件将数据加载到表中?”的答案的解决方案
它使用执行存储过程的Sql代理作业来处理sqlaudit文件。总之,存储过程:
https://dba.stackexchange.com/questions/182336
复制相似问题