文章目录SQL Server 审计功能验证报告文档信息一、审计功能概述1.1 审计功能核心组件二、审计功能验证步骤2.1 启用 SQL Server 审计步骤 1创建服务器审计对象步骤 2启用服务器审计2.2 创建服务器级别审计规范2.3 创建数据库级别审计规范2.4 验证审计功能验证 SQL 1检查服务器审计状态验证 SQL 2检查服务器审计规范状态验证 SQL 3检查数据库审计规范状态验证 SQL 4查看审计事件记录2.5 执行测试操作生成审计记录三、审计事件分类说明3.1 服务器级别审计事件组3.2 数据库级别审计操作3.3 可审计的敏感事件四、审计日志分析4.1 审计日志字段说明4.2 审计日志查询示例示例 1查询登录失败记录示例 2查询 DDL 操作记录示例 3查询特定表的访问记录示例 4统计审计事件五、审计最佳实践5.1 审计策略建议5.2 性能优化建议5.3 存储管理5.4 安全建议六、审计功能管理 SQL6.1 禁用审计规范6.2 禁用审计6.3 删除审计规范6.4 删除审计七、验证检查清单八、常见问题Q1审计功能未生效怎么办Q2审计日志文件过大如何处理Q3审计对性能有多大影响Q4如何备份审计日志九、补充测试验证结果9.1 测试环境9.2 审计配置状态服务器审计对象服务器审计规范数据库审计规范9.3 实际验证结果验证 1DML 操作审计验证 2登录事件审计验证 3审计事件统计验证 4审计文件生成9.4 补充测试结论9.5 验证检查清单更新9.6 性能观察十、参考资源SQL Server 审计功能验证报告文档信息项目内容文档标题SQL Server 审计功能验证报告测试环境mssql-1c247f8d测试日期2026-03-13文档版本v1.0一、审计功能概述SQL Server 审计SQL Server Audit是 SQL Server 提供的一种安全机制用于跟踪和记录数据库服务器、数据库以及数据库对象上发生的各种事件。审计功能可以帮助组织满足合规性要求并检测潜在的安全威胁。1.1 审计功能核心组件组件说明Server Audit服务器级别的审计对象指定审计日志的存储位置和属性Server Audit Specification服务器级别的审计规范定义要审计的服务器级别事件Database Audit Specification数据库级别的审计规范定义要审计的数据库级别事件二、审计功能验证步骤2.1 启用 SQL Server 审计步骤 1创建服务器审计对象-- 创建服务器审计对象将审计日志存储到文件CREATESERVER AUDIT[Server_Audit_Test]TOFILE(FILEPATHC:\SQLAudit\,-- 审计文件存储路径MAXSIZE100MB,-- 单个审计文件最大大小MAX_ROLLOVER_FILES10,-- 最多保留的审计文件数量MAX_FILES100,-- 总共允许的审计文件数量RESERVE_DISK_SPACEOFF-- 不预先预留磁盘空间)WITH(QUEUE_DELAY1000,-- 审计队列延迟毫秒ON_FAILURECONTINUE-- 审计失败时继续操作);步骤 2启用服务器审计-- 启用服务器审计ALTERSERVER AUDIT[Server_Audit_Test]WITH(STATEON);2.2 创建服务器级别审计规范-- 创建服务器级别审计规范CREATESERVER AUDIT SPECIFICATION[Server_Audit_Spec_Login]FORSERVER AUDIT[Server_Audit_Test]ADD(-- 审计失败的登录事件FAILED_LOGIN_GROUP,-- 审计成功的登录事件SUCCESSFUL_LOGIN_GROUP,-- 审计登录登出事件LOGOUT_GROUP)WITH(STATEON);2.3 创建数据库级别审计规范-- 使用测试数据库USE[TestDB];GO-- 创建数据库级别审计规范CREATEDATABASEAUDIT SPECIFICATION[Database_Audit_Spec_DML]FORSERVER AUDIT[Server_Audit_Test]ADD(-- 审计 SELECT 操作SELECTONSCHEMA::dboBYPUBLIC,-- 审计 INSERT 操作INSERTONSCHEMA::dboBYPUBLIC,-- 审计 UPDATE 操作UPDATEONSCHEMA::dboBYPUBLIC,-- 审计 DELETE 操作DELETEONSCHEMA::dboBYPUBLIC)WITH(STATEON);2.4 验证审计功能验证 SQL 1检查服务器审计状态-- 查看服务器审计状态SELECTnameAS审计名称,type_descAS审计类型,is_state_enabledAS是否启用,audit_file_pathAS审计文件路径,max_file_sizeAS最大文件大小(MB),max_rollover_filesAS最大滚动文件数FROMsys.server_audits;预期输出示例审计名称审计类型是否启用审计文件路径最大文件大小(MB)Server_Audit_TestFILE1C:\SQLAudit\100验证 SQL 2检查服务器审计规范状态-- 查看服务器审计规范SELECTsas.nameAS审计规范名称,sa.nameAS关联审计名称,sas.is_state_enabledAS是否启用,sas.create_dateAS创建时间FROMsys.server_audit_specifications sasINNERJOINsys.server_audits saONsas.audit_guidsa.audit_guid;验证 SQL 3检查数据库审计规范状态-- 查看数据库审计规范USE[TestDB];GOSELECTdas.nameAS数据库审计规范名称,sa.nameAS关联审计名称,das.is_state_enabledAS是否启用,das.create_dateAS创建时间FROMsys.database_audit_specifications dasINNERJOINsys.server_audits saONdas.audit_guidsa.audit_guid;验证 SQL 4查看审计事件记录-- 查看审计日志内容使用 sys.fn_get_audit_file 函数SELECTevent_timeAS事件时间,sequence_numberAS序列号,action_idAS操作ID,action_nameAS操作名称,succeededAS是否成功,session_server_principal_nameAS登录名,database_nameAS数据库名,schema_nameAS架构名,object_nameAS对象名,statementAS执行语句,file_nameAS审计文件名FROMsys.fn_get_audit_file(C:\SQLAudit\*.sqlaudit,DEFAULT,DEFAULT)ORDERBYevent_timeDESC;2.5 执行测试操作生成审计记录-- 登录测试生成登录审计记录-- 1. 以 test_user 登录-- 2. 执行以下操作USE[TestDB];GO-- 创建测试表CREATETABLEAuditTestTable(idINTIDENTITYPRIMARYKEY,name NVARCHAR(100),created_atDATETIMEDEFAULTGETDATE());GO-- 插入测试数据生成 INSERT 审计记录INSERTINTOAuditTestTable(name)VALUES(测试数据1),(测试数据2),(测试数据3);GO-- 查询数据生成 SELECT 审计记录SELECT*FROMAuditTestTable;GO-- 更新数据生成 UPDATE 审计记录UPDATEAuditTestTableSETname更新后数据WHEREid1;GO-- 删除数据生成 DELETE 审计记录DELETEFROMAuditTestTableWHEREid3;GO三、审计事件分类说明3.1 服务器级别审计事件组事件组说明适用场景SUCCESSFUL_LOGIN_GROUP成功的登录事件监控用户登录行为FAILED_LOGIN_GROUP失败的登录事件检测暴力破解尝试LOGOUT_GROUP登出事件跟踪用户会话结束DATABASE_CHANGE_GROUP数据库创建、修改、删除追踪数据库结构变更DATABASE_OBJECT_CHANGE_GROUP数据库对象的创建、修改、删除追踪对象变更DATABASE_OWNERSHIP_CHANGE_GROUP数据库所有权变更监控权限变更DATABASE_ROLE_MEMBER_CHANGE_GROUP数据库角色成员变更监控权限变更BACKUP_RESTORE_GROUP备份和还原操作追踪数据保护操作SERVER_PERMISSION_CHANGE_GROUP服务器权限变更监控权限变更SERVER_OBJECT_CHANGE_GROUP服务器对象变更追踪服务器对象修改SERVER_OBJECT_OWNERSHIP_CHANGE_GROUP服务器对象所有权变更监控权限变更SERVER_PRINCIPAL_CHANGE_GROUP服务器主体变更追踪登录账号变更SERVER_STATE_CHANGE_GROUP服务器状态变更追踪服务启停SCHEMA_OBJECT_CHANGE_GROUP架构对象变更追踪表、视图等修改SCHEMA_OBJECT_OWNERSHIP_CHANGE_GROUP架构对象所有权变更监控权限变更TRACE_CHANGE_GROUPSQL Trace 配置变更监控跟踪配置AUDIT_CHANGE_GROUP审计配置变更监控审计功能修改3.2 数据库级别审计操作操作类型说明action_idSELECT查询操作SLINSERT插入操作INUPDATE更新操作UPDELETE删除操作DLEXECUTE执行存储过程/函数EXRECEIVE接收消息RCREFERENCES引用约束操作RF3.3 可审计的敏感事件事件类型说明推荐级别权限变更GRANT、REVOKE、DENY 操作高特权操作CREATE、ALTER、DROP高登录事件登录成功/失败高DDL 操作数据定义语言操作中DML 操作数据操作语言针对敏感表中备份还原备份、还原操作高四、审计日志分析4.1 审计日志字段说明字段名说明event_time事件发生的日期和时间sequence_number审计事件的序列号action_id操作的 ID如 SL、IN、UP、DLaction_name操作的名称succeeded操作是否成功1成功0失败session_server_principal_name执行操作的登录名server_principal_name服务器的主体名称database_principal_name数据库的主体名称database_name数据库名称schema_name架构名称object_name对象名称表、视图等statement执行的 SQL 语句file_name审计文件名audit_file_offset审计文件中的偏移量4.2 审计日志查询示例示例 1查询登录失败记录-- 查询最近24小时内的登录失败事件SELECTevent_timeAS失败时间,session_server_principal_nameAS登录名,server_principal_nameAS服务器主体,client_ipAS客户端IP,succeededAS是否成功FROMsys.fn_get_audit_file(C:\SQLAudit\*.sqlaudit,DEFAULT,DEFAULT)WHEREaction_idLGFL-- LGFL 登录失败ANDevent_timeDATEADD(HOUR,-24,GETDATE())ORDERBYevent_timeDESC;示例 2查询 DDL 操作记录-- 查询所有 DDL 操作SELECTevent_timeAS操作时间,database_nameAS数据库,schema_nameAS架构,object_nameAS对象,action_nameAS操作类型,statementAS执行语句,session_server_principal_nameAS操作用户FROMsys.fn_get_audit_file(C:\SQLAudit\*.sqlaudit,DEFAULT,DEFAULT)WHEREaction_idIN(CR,DR,AL)-- CREATE、DROP、ALTERORDERBYevent_timeDESC;示例 3查询特定表的访问记录-- 查询对特定敏感表的所有访问SELECTevent_timeAS访问时间,action_nameAS操作类型,database_principal_nameAS数据库用户,session_server_principal_nameAS登录用户,succeededAS是否成功,statementAS执行语句FROMsys.fn_get_audit_file(C:\SQLAudit\*.sqlaudit,DEFAULT,DEFAULT)WHEREdatabase_nameTestDBANDobject_nameAuditTestTableORDERBYevent_timeDESC;示例 4统计审计事件-- 统计各类操作的数量SELECTaction_nameAS操作类型,database_nameAS数据库,schema_nameAS架构,COUNT(*)AS操作次数,COUNT(CASEWHENsucceeded1THEN1END)AS成功次数,COUNT(CASEWHENsucceeded0THEN1END)AS失败次数FROMsys.fn_get_audit_file(C:\SQLAudit\*.sqlaudit,DEFAULT,DEFAULT)GROUPBYaction_name,database_name,schema_nameORDERBYCOUNT(*)DESC;五、审计最佳实践5.1 审计策略建议场景推荐审计内容优先级生产环境登录事件失败、权限变更、特权操作高财务数据所有的 DML 操作、查询操作高开发环境DDL 操作、主要对象的变更中合规要求根据合规审计要求全面审计高5.2 性能优化建议优化项说明配置建议队列延迟审计队列写入延迟影响性能QUEUE_DELAY 1000毫秒文件大小单个审计文件的最大大小MAXSIZE 100 MB或更大滚动文件数保留的审计文件数量根据存储空间设置审计范围只审计必要的事件减少性能影响避免审计所有 SELECT 操作5.3 存储管理-- 查看审计文件的使用情况SELECTfile_nameAS文件路径,file_sizeAS文件大小(字节),audit_file_offsetAS偏移量,event_timeAS最后事件时间FROMsys.fn_get_audit_file(C:\SQLAudit\*.sqlaudit,DEFAULT,DEFAULT)GROUPBYfile_name,file_size,audit_file_offset,event_time;5.4 安全建议审计文件保护确保审计文件存储路径有适当的访问控制定期备份定期备份审计日志文件到安全位置日志轮转配置适当的文件轮转策略异常监控建立审计日志的异常监控机制六、审计功能管理 SQL6.1 禁用审计规范-- 禁用数据库审计规范ALTERDATABASEAUDIT SPECIFICATION[Database_Audit_Spec_DML]WITH(STATEOFF);GO-- 禁用服务器审计规范ALTERSERVER AUDIT SPECIFICATION[Server_Audit_Spec_Login]WITH(STATEOFF);GO6.2 禁用审计-- 禁用服务器审计ALTERSERVER AUDIT[Server_Audit_Test]WITH(STATEOFF);GO6.3 删除审计规范-- 删除数据库审计规范DROPDATABASEAUDIT SPECIFICATION[Database_Audit_Spec_DML];GO-- 删除服务器审计规范DROPSERVER AUDIT SPECIFICATION[Server_Audit_Spec_Login];GO6.4 删除审计-- 删除服务器审计DROPSERVER AUDIT[Server_Audit_Test];GO七、验证检查清单检查项状态说明服务器审计对象创建成功☐ 确认执行 CREATE SERVER AUDIT 成功服务器审计已启用☐ 确认is_state_enabled 1服务器审计规范创建成功☐ 确认执行 CREATE SERVER AUDIT SPECIFICATION 成功数据库审计规范创建成功☐ 确认执行 CREATE DATABASE AUDIT SPECIFICATION 成功登录事件被记录☐ 确认可查询到登录审计记录DML 操作被记录☐ 确认可查询到 INSERT/UPDATE/DELETE 记录审计日志可查询☐ 确认使用sys.fn_get_audit_file可查询审计文件正常生成☐ 确认文件路径下生成了 .sqlaudit 文件八、常见问题Q1审计功能未生效怎么办检查步骤-- 1. 确认服务器审计是否启用SELECTname,is_state_enabledFROMsys.server_audits;-- 2. 确认审计规范是否启用SELECTname,is_state_enabledFROMsys.server_audit_specifications;SELECTname,is_state_enabledFROMsys.database_audit_specifications;-- 3. 检查文件路径是否有写权限-- 4. 检查磁盘空间是否充足Q2审计日志文件过大如何处理解决方案调整MAXSIZE参数定期清理旧的审计日志文件将审计日志归档到其他存储介质Q3审计对性能有多大影响影响分析审计会增加 I/O 开销审计所有操作会显著影响性能建议只审计关键事件使用QUEUE_DELAY参数优化Q4如何备份审计日志备份方法-- 1. 先禁用审计确保所有日志写入完成ALTERSERVER AUDIT[Server_Audit_Test]WITH(STATEOFF);-- 2. 复制审计日志文件到备份位置-- 使用系统命令或脚本复制 .sqlaudit 文件-- 3. 重新启用审计ALTERSERVER AUDIT[Server_Audit_Test]WITH(STATEON);九、补充测试验证结果9.1 测试环境项目内容测试实例mssql-1c247f8d00-0 (Kubernetes Pod)实例排序规则Chinese_PRC_CI_AS测试时间2026-03-16审计文件路径/var/opt/mssql/data/审计文件名Test_Audit_*.sqlaudit9.2 审计配置状态服务器审计对象名称类型是否启用队列延迟失败操作Test_AuditFILE1 (启用)1000msCONTINUE服务器审计规范名称关联审计是否启用创建时间Test_Server_Audit_SpecTest_Audit1 (启用)2026-03-13数据库审计规范名称关联审计数据库是否启用Test_DB_Audit_SpecTest_AuditTestDB_SameCollation1 (启用)9.3 实际验证结果验证 1DML 操作审计执行的测试操作INSERTINTOTestCaseSensitivityVALUES(4,NEW);UPDATETestCaseSensitivitySETnameupdatedWHEREid1;DELETEFROMTestCaseSensitivityWHEREid2;SELECT*FROMTestCaseSensitivity;审计日志记录事件时间操作ID数据库对象名用户状态2026-03-16 05:43:14SLTestDB_SameCollationTestCaseSensitivitysa✅ 成功2026-03-16 05:43:14DLTestDB_SameCollationTestCaseSensitivitysa✅ 成功2026-03-16 05:43:14UPTestDB_SameCollationTestCaseSensitivitysa✅ 成功2026-03-16 05:43:14INTestDB_SameCollationTestCaseSensitivitysa✅ 成功结论✅ 验证通过 - 所有 DML 操作都被正确记录验证 2登录事件审计审计日志记录Top 10事件时间操作ID是否成功登录名服务器主体2026-03-16 05:43:36LGIS1sasa2026-03-16 05:43:36LGIS1sasa2026-03-16 05:43:36LGIS1sasa结论✅ 验证通过 - 登录成功事件 (LGIS) 被正确记录验证 3审计事件统计统计数据操作ID操作类型记录数成功数失败数LGIS登录成功365,602365,6020SLSELECT660ININSERT330UPUPDATE110DLDELETE110AUSC审计配置变更110结论✅ 验证通过 - 所有操作记录准确无失败记录验证 4审计文件生成审计文件列表/var/opt/mssql/data/Test_Audit_707324B6-97AD-4F76-8A64-7832E3475384_0_134178878077710000.sqlaudit /var/opt/mssql/data/Test_Audit_707324B6-97AD-4F76-8A64-7832E3475384_0_134178878175760000.sqlaudit结论✅ 验证通过 - 审计文件正常生成9.4 补充测试结论测试项预期行为实际结果状态服务器审计对象启用is_state_enabled 11✅ 通过服务器审计规范启用规范存在且启用Test_Server_Audit_Spec✅ 通过数据库审计规范启用规范存在且启用Test_DB_Audit_Spec✅ 通过INSERT 操作审计记录 IN 操作有记录✅ 通过UPDATE 操作审计记录 UP 操作有记录✅ 通过DELETE 操作审计记录 DL 操作有记录✅ 通过SELECT 操作审计记录 SL 操作有记录✅ 通过登录事件审计记录 LGIS 操作有记录✅ 通过审计文件生成.sqlaudit 文件存在文件存在✅ 通过审计日志可查询fn_get_audit_file 可用查询成功✅ 通过9.5 验证检查清单更新检查项状态验证时间服务器审计对象创建成功✅ 已验证2026-03-16服务器审计已启用✅ 已验证2026-03-16服务器审计规范创建成功✅ 已验证2026-03-16数据库审计规范创建成功✅ 已验证2026-03-16登录事件被记录✅ 已验证2026-03-16DML 操作被记录✅ 已验证2026-03-16审计日志可查询✅ 已验证2026-03-16审计文件正常生成✅ 已验证2026-03-169.6 性能观察审计队列延迟1000ms累计登录事件365,602 条自创建以来DML 操作记录11 条审计对查询性能影响无明显延迟十、参考资源资源链接SQL Server 官方文档 - 审计https://learn.microsoft.com/zh-cn/sql/relational-databases/security/auditing/sql-server-audit-database-enginesys.fn_get_audit_filehttps://learn.microsoft.com/zh-cn/sql/relational-databases/system-functions/sys-fn-get-audit-file-transact-sql服务器审计对象https://learn.microsoft.com/zh-cn/sql/relational-databases/security/auditing/sql-server-audit-database-engine
SQL Server 审计功能验证报告
文章目录SQL Server 审计功能验证报告文档信息一、审计功能概述1.1 审计功能核心组件二、审计功能验证步骤2.1 启用 SQL Server 审计步骤 1创建服务器审计对象步骤 2启用服务器审计2.2 创建服务器级别审计规范2.3 创建数据库级别审计规范2.4 验证审计功能验证 SQL 1检查服务器审计状态验证 SQL 2检查服务器审计规范状态验证 SQL 3检查数据库审计规范状态验证 SQL 4查看审计事件记录2.5 执行测试操作生成审计记录三、审计事件分类说明3.1 服务器级别审计事件组3.2 数据库级别审计操作3.3 可审计的敏感事件四、审计日志分析4.1 审计日志字段说明4.2 审计日志查询示例示例 1查询登录失败记录示例 2查询 DDL 操作记录示例 3查询特定表的访问记录示例 4统计审计事件五、审计最佳实践5.1 审计策略建议5.2 性能优化建议5.3 存储管理5.4 安全建议六、审计功能管理 SQL6.1 禁用审计规范6.2 禁用审计6.3 删除审计规范6.4 删除审计七、验证检查清单八、常见问题Q1审计功能未生效怎么办Q2审计日志文件过大如何处理Q3审计对性能有多大影响Q4如何备份审计日志九、补充测试验证结果9.1 测试环境9.2 审计配置状态服务器审计对象服务器审计规范数据库审计规范9.3 实际验证结果验证 1DML 操作审计验证 2登录事件审计验证 3审计事件统计验证 4审计文件生成9.4 补充测试结论9.5 验证检查清单更新9.6 性能观察十、参考资源SQL Server 审计功能验证报告文档信息项目内容文档标题SQL Server 审计功能验证报告测试环境mssql-1c247f8d测试日期2026-03-13文档版本v1.0一、审计功能概述SQL Server 审计SQL Server Audit是 SQL Server 提供的一种安全机制用于跟踪和记录数据库服务器、数据库以及数据库对象上发生的各种事件。审计功能可以帮助组织满足合规性要求并检测潜在的安全威胁。1.1 审计功能核心组件组件说明Server Audit服务器级别的审计对象指定审计日志的存储位置和属性Server Audit Specification服务器级别的审计规范定义要审计的服务器级别事件Database Audit Specification数据库级别的审计规范定义要审计的数据库级别事件二、审计功能验证步骤2.1 启用 SQL Server 审计步骤 1创建服务器审计对象-- 创建服务器审计对象将审计日志存储到文件CREATESERVER AUDIT[Server_Audit_Test]TOFILE(FILEPATHC:\SQLAudit\,-- 审计文件存储路径MAXSIZE100MB,-- 单个审计文件最大大小MAX_ROLLOVER_FILES10,-- 最多保留的审计文件数量MAX_FILES100,-- 总共允许的审计文件数量RESERVE_DISK_SPACEOFF-- 不预先预留磁盘空间)WITH(QUEUE_DELAY1000,-- 审计队列延迟毫秒ON_FAILURECONTINUE-- 审计失败时继续操作);步骤 2启用服务器审计-- 启用服务器审计ALTERSERVER AUDIT[Server_Audit_Test]WITH(STATEON);2.2 创建服务器级别审计规范-- 创建服务器级别审计规范CREATESERVER AUDIT SPECIFICATION[Server_Audit_Spec_Login]FORSERVER AUDIT[Server_Audit_Test]ADD(-- 审计失败的登录事件FAILED_LOGIN_GROUP,-- 审计成功的登录事件SUCCESSFUL_LOGIN_GROUP,-- 审计登录登出事件LOGOUT_GROUP)WITH(STATEON);2.3 创建数据库级别审计规范-- 使用测试数据库USE[TestDB];GO-- 创建数据库级别审计规范CREATEDATABASEAUDIT SPECIFICATION[Database_Audit_Spec_DML]FORSERVER AUDIT[Server_Audit_Test]ADD(-- 审计 SELECT 操作SELECTONSCHEMA::dboBYPUBLIC,-- 审计 INSERT 操作INSERTONSCHEMA::dboBYPUBLIC,-- 审计 UPDATE 操作UPDATEONSCHEMA::dboBYPUBLIC,-- 审计 DELETE 操作DELETEONSCHEMA::dboBYPUBLIC)WITH(STATEON);2.4 验证审计功能验证 SQL 1检查服务器审计状态-- 查看服务器审计状态SELECTnameAS审计名称,type_descAS审计类型,is_state_enabledAS是否启用,audit_file_pathAS审计文件路径,max_file_sizeAS最大文件大小(MB),max_rollover_filesAS最大滚动文件数FROMsys.server_audits;预期输出示例审计名称审计类型是否启用审计文件路径最大文件大小(MB)Server_Audit_TestFILE1C:\SQLAudit\100验证 SQL 2检查服务器审计规范状态-- 查看服务器审计规范SELECTsas.nameAS审计规范名称,sa.nameAS关联审计名称,sas.is_state_enabledAS是否启用,sas.create_dateAS创建时间FROMsys.server_audit_specifications sasINNERJOINsys.server_audits saONsas.audit_guidsa.audit_guid;验证 SQL 3检查数据库审计规范状态-- 查看数据库审计规范USE[TestDB];GOSELECTdas.nameAS数据库审计规范名称,sa.nameAS关联审计名称,das.is_state_enabledAS是否启用,das.create_dateAS创建时间FROMsys.database_audit_specifications dasINNERJOINsys.server_audits saONdas.audit_guidsa.audit_guid;验证 SQL 4查看审计事件记录-- 查看审计日志内容使用 sys.fn_get_audit_file 函数SELECTevent_timeAS事件时间,sequence_numberAS序列号,action_idAS操作ID,action_nameAS操作名称,succeededAS是否成功,session_server_principal_nameAS登录名,database_nameAS数据库名,schema_nameAS架构名,object_nameAS对象名,statementAS执行语句,file_nameAS审计文件名FROMsys.fn_get_audit_file(C:\SQLAudit\*.sqlaudit,DEFAULT,DEFAULT)ORDERBYevent_timeDESC;2.5 执行测试操作生成审计记录-- 登录测试生成登录审计记录-- 1. 以 test_user 登录-- 2. 执行以下操作USE[TestDB];GO-- 创建测试表CREATETABLEAuditTestTable(idINTIDENTITYPRIMARYKEY,name NVARCHAR(100),created_atDATETIMEDEFAULTGETDATE());GO-- 插入测试数据生成 INSERT 审计记录INSERTINTOAuditTestTable(name)VALUES(测试数据1),(测试数据2),(测试数据3);GO-- 查询数据生成 SELECT 审计记录SELECT*FROMAuditTestTable;GO-- 更新数据生成 UPDATE 审计记录UPDATEAuditTestTableSETname更新后数据WHEREid1;GO-- 删除数据生成 DELETE 审计记录DELETEFROMAuditTestTableWHEREid3;GO三、审计事件分类说明3.1 服务器级别审计事件组事件组说明适用场景SUCCESSFUL_LOGIN_GROUP成功的登录事件监控用户登录行为FAILED_LOGIN_GROUP失败的登录事件检测暴力破解尝试LOGOUT_GROUP登出事件跟踪用户会话结束DATABASE_CHANGE_GROUP数据库创建、修改、删除追踪数据库结构变更DATABASE_OBJECT_CHANGE_GROUP数据库对象的创建、修改、删除追踪对象变更DATABASE_OWNERSHIP_CHANGE_GROUP数据库所有权变更监控权限变更DATABASE_ROLE_MEMBER_CHANGE_GROUP数据库角色成员变更监控权限变更BACKUP_RESTORE_GROUP备份和还原操作追踪数据保护操作SERVER_PERMISSION_CHANGE_GROUP服务器权限变更监控权限变更SERVER_OBJECT_CHANGE_GROUP服务器对象变更追踪服务器对象修改SERVER_OBJECT_OWNERSHIP_CHANGE_GROUP服务器对象所有权变更监控权限变更SERVER_PRINCIPAL_CHANGE_GROUP服务器主体变更追踪登录账号变更SERVER_STATE_CHANGE_GROUP服务器状态变更追踪服务启停SCHEMA_OBJECT_CHANGE_GROUP架构对象变更追踪表、视图等修改SCHEMA_OBJECT_OWNERSHIP_CHANGE_GROUP架构对象所有权变更监控权限变更TRACE_CHANGE_GROUPSQL Trace 配置变更监控跟踪配置AUDIT_CHANGE_GROUP审计配置变更监控审计功能修改3.2 数据库级别审计操作操作类型说明action_idSELECT查询操作SLINSERT插入操作INUPDATE更新操作UPDELETE删除操作DLEXECUTE执行存储过程/函数EXRECEIVE接收消息RCREFERENCES引用约束操作RF3.3 可审计的敏感事件事件类型说明推荐级别权限变更GRANT、REVOKE、DENY 操作高特权操作CREATE、ALTER、DROP高登录事件登录成功/失败高DDL 操作数据定义语言操作中DML 操作数据操作语言针对敏感表中备份还原备份、还原操作高四、审计日志分析4.1 审计日志字段说明字段名说明event_time事件发生的日期和时间sequence_number审计事件的序列号action_id操作的 ID如 SL、IN、UP、DLaction_name操作的名称succeeded操作是否成功1成功0失败session_server_principal_name执行操作的登录名server_principal_name服务器的主体名称database_principal_name数据库的主体名称database_name数据库名称schema_name架构名称object_name对象名称表、视图等statement执行的 SQL 语句file_name审计文件名audit_file_offset审计文件中的偏移量4.2 审计日志查询示例示例 1查询登录失败记录-- 查询最近24小时内的登录失败事件SELECTevent_timeAS失败时间,session_server_principal_nameAS登录名,server_principal_nameAS服务器主体,client_ipAS客户端IP,succeededAS是否成功FROMsys.fn_get_audit_file(C:\SQLAudit\*.sqlaudit,DEFAULT,DEFAULT)WHEREaction_idLGFL-- LGFL 登录失败ANDevent_timeDATEADD(HOUR,-24,GETDATE())ORDERBYevent_timeDESC;示例 2查询 DDL 操作记录-- 查询所有 DDL 操作SELECTevent_timeAS操作时间,database_nameAS数据库,schema_nameAS架构,object_nameAS对象,action_nameAS操作类型,statementAS执行语句,session_server_principal_nameAS操作用户FROMsys.fn_get_audit_file(C:\SQLAudit\*.sqlaudit,DEFAULT,DEFAULT)WHEREaction_idIN(CR,DR,AL)-- CREATE、DROP、ALTERORDERBYevent_timeDESC;示例 3查询特定表的访问记录-- 查询对特定敏感表的所有访问SELECTevent_timeAS访问时间,action_nameAS操作类型,database_principal_nameAS数据库用户,session_server_principal_nameAS登录用户,succeededAS是否成功,statementAS执行语句FROMsys.fn_get_audit_file(C:\SQLAudit\*.sqlaudit,DEFAULT,DEFAULT)WHEREdatabase_nameTestDBANDobject_nameAuditTestTableORDERBYevent_timeDESC;示例 4统计审计事件-- 统计各类操作的数量SELECTaction_nameAS操作类型,database_nameAS数据库,schema_nameAS架构,COUNT(*)AS操作次数,COUNT(CASEWHENsucceeded1THEN1END)AS成功次数,COUNT(CASEWHENsucceeded0THEN1END)AS失败次数FROMsys.fn_get_audit_file(C:\SQLAudit\*.sqlaudit,DEFAULT,DEFAULT)GROUPBYaction_name,database_name,schema_nameORDERBYCOUNT(*)DESC;五、审计最佳实践5.1 审计策略建议场景推荐审计内容优先级生产环境登录事件失败、权限变更、特权操作高财务数据所有的 DML 操作、查询操作高开发环境DDL 操作、主要对象的变更中合规要求根据合规审计要求全面审计高5.2 性能优化建议优化项说明配置建议队列延迟审计队列写入延迟影响性能QUEUE_DELAY 1000毫秒文件大小单个审计文件的最大大小MAXSIZE 100 MB或更大滚动文件数保留的审计文件数量根据存储空间设置审计范围只审计必要的事件减少性能影响避免审计所有 SELECT 操作5.3 存储管理-- 查看审计文件的使用情况SELECTfile_nameAS文件路径,file_sizeAS文件大小(字节),audit_file_offsetAS偏移量,event_timeAS最后事件时间FROMsys.fn_get_audit_file(C:\SQLAudit\*.sqlaudit,DEFAULT,DEFAULT)GROUPBYfile_name,file_size,audit_file_offset,event_time;5.4 安全建议审计文件保护确保审计文件存储路径有适当的访问控制定期备份定期备份审计日志文件到安全位置日志轮转配置适当的文件轮转策略异常监控建立审计日志的异常监控机制六、审计功能管理 SQL6.1 禁用审计规范-- 禁用数据库审计规范ALTERDATABASEAUDIT SPECIFICATION[Database_Audit_Spec_DML]WITH(STATEOFF);GO-- 禁用服务器审计规范ALTERSERVER AUDIT SPECIFICATION[Server_Audit_Spec_Login]WITH(STATEOFF);GO6.2 禁用审计-- 禁用服务器审计ALTERSERVER AUDIT[Server_Audit_Test]WITH(STATEOFF);GO6.3 删除审计规范-- 删除数据库审计规范DROPDATABASEAUDIT SPECIFICATION[Database_Audit_Spec_DML];GO-- 删除服务器审计规范DROPSERVER AUDIT SPECIFICATION[Server_Audit_Spec_Login];GO6.4 删除审计-- 删除服务器审计DROPSERVER AUDIT[Server_Audit_Test];GO七、验证检查清单检查项状态说明服务器审计对象创建成功☐ 确认执行 CREATE SERVER AUDIT 成功服务器审计已启用☐ 确认is_state_enabled 1服务器审计规范创建成功☐ 确认执行 CREATE SERVER AUDIT SPECIFICATION 成功数据库审计规范创建成功☐ 确认执行 CREATE DATABASE AUDIT SPECIFICATION 成功登录事件被记录☐ 确认可查询到登录审计记录DML 操作被记录☐ 确认可查询到 INSERT/UPDATE/DELETE 记录审计日志可查询☐ 确认使用sys.fn_get_audit_file可查询审计文件正常生成☐ 确认文件路径下生成了 .sqlaudit 文件八、常见问题Q1审计功能未生效怎么办检查步骤-- 1. 确认服务器审计是否启用SELECTname,is_state_enabledFROMsys.server_audits;-- 2. 确认审计规范是否启用SELECTname,is_state_enabledFROMsys.server_audit_specifications;SELECTname,is_state_enabledFROMsys.database_audit_specifications;-- 3. 检查文件路径是否有写权限-- 4. 检查磁盘空间是否充足Q2审计日志文件过大如何处理解决方案调整MAXSIZE参数定期清理旧的审计日志文件将审计日志归档到其他存储介质Q3审计对性能有多大影响影响分析审计会增加 I/O 开销审计所有操作会显著影响性能建议只审计关键事件使用QUEUE_DELAY参数优化Q4如何备份审计日志备份方法-- 1. 先禁用审计确保所有日志写入完成ALTERSERVER AUDIT[Server_Audit_Test]WITH(STATEOFF);-- 2. 复制审计日志文件到备份位置-- 使用系统命令或脚本复制 .sqlaudit 文件-- 3. 重新启用审计ALTERSERVER AUDIT[Server_Audit_Test]WITH(STATEON);九、补充测试验证结果9.1 测试环境项目内容测试实例mssql-1c247f8d00-0 (Kubernetes Pod)实例排序规则Chinese_PRC_CI_AS测试时间2026-03-16审计文件路径/var/opt/mssql/data/审计文件名Test_Audit_*.sqlaudit9.2 审计配置状态服务器审计对象名称类型是否启用队列延迟失败操作Test_AuditFILE1 (启用)1000msCONTINUE服务器审计规范名称关联审计是否启用创建时间Test_Server_Audit_SpecTest_Audit1 (启用)2026-03-13数据库审计规范名称关联审计数据库是否启用Test_DB_Audit_SpecTest_AuditTestDB_SameCollation1 (启用)9.3 实际验证结果验证 1DML 操作审计执行的测试操作INSERTINTOTestCaseSensitivityVALUES(4,NEW);UPDATETestCaseSensitivitySETnameupdatedWHEREid1;DELETEFROMTestCaseSensitivityWHEREid2;SELECT*FROMTestCaseSensitivity;审计日志记录事件时间操作ID数据库对象名用户状态2026-03-16 05:43:14SLTestDB_SameCollationTestCaseSensitivitysa✅ 成功2026-03-16 05:43:14DLTestDB_SameCollationTestCaseSensitivitysa✅ 成功2026-03-16 05:43:14UPTestDB_SameCollationTestCaseSensitivitysa✅ 成功2026-03-16 05:43:14INTestDB_SameCollationTestCaseSensitivitysa✅ 成功结论✅ 验证通过 - 所有 DML 操作都被正确记录验证 2登录事件审计审计日志记录Top 10事件时间操作ID是否成功登录名服务器主体2026-03-16 05:43:36LGIS1sasa2026-03-16 05:43:36LGIS1sasa2026-03-16 05:43:36LGIS1sasa结论✅ 验证通过 - 登录成功事件 (LGIS) 被正确记录验证 3审计事件统计统计数据操作ID操作类型记录数成功数失败数LGIS登录成功365,602365,6020SLSELECT660ININSERT330UPUPDATE110DLDELETE110AUSC审计配置变更110结论✅ 验证通过 - 所有操作记录准确无失败记录验证 4审计文件生成审计文件列表/var/opt/mssql/data/Test_Audit_707324B6-97AD-4F76-8A64-7832E3475384_0_134178878077710000.sqlaudit /var/opt/mssql/data/Test_Audit_707324B6-97AD-4F76-8A64-7832E3475384_0_134178878175760000.sqlaudit结论✅ 验证通过 - 审计文件正常生成9.4 补充测试结论测试项预期行为实际结果状态服务器审计对象启用is_state_enabled 11✅ 通过服务器审计规范启用规范存在且启用Test_Server_Audit_Spec✅ 通过数据库审计规范启用规范存在且启用Test_DB_Audit_Spec✅ 通过INSERT 操作审计记录 IN 操作有记录✅ 通过UPDATE 操作审计记录 UP 操作有记录✅ 通过DELETE 操作审计记录 DL 操作有记录✅ 通过SELECT 操作审计记录 SL 操作有记录✅ 通过登录事件审计记录 LGIS 操作有记录✅ 通过审计文件生成.sqlaudit 文件存在文件存在✅ 通过审计日志可查询fn_get_audit_file 可用查询成功✅ 通过9.5 验证检查清单更新检查项状态验证时间服务器审计对象创建成功✅ 已验证2026-03-16服务器审计已启用✅ 已验证2026-03-16服务器审计规范创建成功✅ 已验证2026-03-16数据库审计规范创建成功✅ 已验证2026-03-16登录事件被记录✅ 已验证2026-03-16DML 操作被记录✅ 已验证2026-03-16审计日志可查询✅ 已验证2026-03-16审计文件正常生成✅ 已验证2026-03-169.6 性能观察审计队列延迟1000ms累计登录事件365,602 条自创建以来DML 操作记录11 条审计对查询性能影响无明显延迟十、参考资源资源链接SQL Server 官方文档 - 审计https://learn.microsoft.com/zh-cn/sql/relational-databases/security/auditing/sql-server-audit-database-enginesys.fn_get_audit_filehttps://learn.microsoft.com/zh-cn/sql/relational-databases/system-functions/sys-fn-get-audit-file-transact-sql服务器审计对象https://learn.microsoft.com/zh-cn/sql/relational-databases/security/auditing/sql-server-audit-database-engine