SQLServer教程FG074-SQLServer日志审计实战
本文档风哥主要介绍SQLServer数据库日志审计相关知识,包括SQLServer数据库SQL审计配置、SQLServer数据库登录审计配置、SQLServer数据库审计日志查询与分析、SQLServer数据库审计策略设计等内容,风哥教程参考SQLServer官方文档Security、Auditing内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 SQLServer数据库日志审计概念
SQLServer数据库日志审计是指对数据库中的各种操作进行记录和追踪,包括登录操作、数据访问、权限变更、DDL操作等。通过审计可以追踪用户行为、发现安全威胁、满足合规要求、支持故障排查。SQL Server提供了多种审计机制,包括SQL Server Audit、C2审计、登录审计等。更多视频教程www.fgedu.net.cn
- 安全合规:满足等保、SOX等合规要求
- 行为追踪:追踪用户操作行为
- 安全检测:发现异常操作和安全威胁
- 故障排查:定位问题原因
- 责任追溯:明确操作责任人
1.2 SQLServer数据库审计类型
1. SQL Server Audit(推荐)
– 服务器级别审计
– 数据库级别审计
– 支持细粒度审计
– 输出到文件、事件日志、安全日志
2. C2审计
– 较老的审计方式
– 记录所有语句和对象访问
– 性能影响较大
3. 登录审计
– 记录登录成功和失败
– 配置简单
– 写入错误日志
4. 跟踪审计(Trace)
– SQL Trace
– 扩展事件(Extended Events)
– 灵活但配置复杂
5. 触发器审计
– DDL触发器
– DML触发器
– 自定义审计逻辑
# 审计级别对比
审计类型 细粒度 性能影响 配置复杂度 推荐度
SQL Audit 高 低 中 ★★★★★
C2审计 低 高 低 ★★
登录审计 低 低 低 ★★★
扩展事件 高 低 高 ★★★★
触发器审计 高 中 高 ★★★
1.3 SQLServer数据库审计组件
SQLServer数据库审计组件结构:
- SQL Server Audit:审计对象,定义审计目标和存储位置
- Audit Specification:审计规范,定义审计的事件和对象
- Server Audit Specification:服务器级别审计规范
- Database Audit Specification:数据库级别审计规范
- Audit Target:审计目标,审计日志存储位置
┌─────────────────────────────────────────────┐
│ SQL Server Audit │
│ (定义审计名称、队列延迟、目标位置) │
├─────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────┐ │
│ │ Server Audit Specification │ │
│ │ (服务器级别审计事件) │ │
│ └─────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────┐ │
│ │ Database Audit Specification │ │
│ │ (数据库级别审计事件) │ │
│ └─────────────────────────────────────┘ │
│ │
├─────────────────────────────────────────────┤
│ Audit Target │
│ – 文件(File) │
│ – 应用程序日志(Application Log) │
│ – 安全日志(Security Log) │
└─────────────────────────────────────────────┘
Part02-生产环境规划与建议
2.1 SQLServer数据库日志审计规划
SQLServer数据库日志审计规划要点:
1. 确定审计需求
– 合规要求(等保、SOX、PCI-DSS)
– 安全要求
– 业务需求
2. 确定审计范围
– 服务器级别审计内容
– 数据库级别审计内容
– 敏感对象审计
3. 设计审计策略
– 审计事件选择
– 审计目标选择
– 审计日志保留策略
4. 评估性能影响
– 测试环境验证
– 监控审计性能开销
– 优化审计配置
# 审计内容规划
服务器级别审计:
– 登录成功和失败
– 服务器角色变更
– 服务器权限变更
– 服务器配置变更
数据库级别审计:
– 数据库角色变更
– 数据库权限变更
– 敏感表访问
– DDL操作
敏感对象审计:
– 敏感表的SELECT/INSERT/UPDATE/DELETE
– 敏感存储过程执行
– 敏感视图访问
2.2 SQLServer数据库审计策略设计
SQLServer数据库审计策略设计建议:
- 分层审计:服务器级别+数据库级别+对象级别
- 重点审计:重点审计敏感数据和关键操作
- 性能优先:避免过度审计影响性能
- 日志管理:规划日志存储和保留策略
- 定期审查:定期审查审计日志和策略
2.3 SQLServer数据库审计日志存储
1. 文件(File)
优点:
– 性能好
– 容量大
– 易于归档
缺点:
– 需要额外管理
– 需要定期清理
2. 应用程序日志(Application Log)
优点:
– 配置简单
– 与Windows日志集成
缺点:
– 容量有限
– 性能影响较大
3. 安全日志(Security Log)
优点:
– 安全性高
– 符合合规要求
缺点:
– 需要特殊权限
– 配置复杂
# 存储规划建议
小型环境:
– 目标: 文件
– 位置: /sqlserver/audit/
– 滚动: 每天一个文件
– 保留: 90天
中型环境:
– 目标: 文件
– 位置: 独立磁盘
– 滚动: 每100MB一个文件
– 保留: 180天
大型环境:
– 目标: 文件 + 日志收集系统
– 位置: 独立存储
– 滚动: 每500MB一个文件
– 保留: 365天
– 归档: 长期存储
Part03-生产环境项目实施方案
3.1 SQLServer数据库SQL审计配置
3.1.1 SQLServer数据库创建服务器级别审计
USE master;
GO
CREATE SERVER AUDIT fgedu_server_audit
TO FILE
(
FILEPATH = ‘/sqlserver/audit/’,
MAXSIZE = 100 MB,
MAX_ROLLOVER_FILES = 100,
RESERVE_DISK_SPACE = ON
)
WITH
(
QUEUE_DELAY = 1000,
ON_FAILURE = CONTINUE
);
GO
Command(s) completed successfully.
# 启用服务器审计
ALTER SERVER AUDIT fgedu_server_audit WITH (STATE = ON);
GO
Command(s) completed successfully.
# 查看服务器审计配置
SELECT name, type_desc, on_failure, is_state_enabled, queue_delay
FROM sys.server_audits;
GO
name type_desc on_failure is_state_enabled queue_delay
——————– ——— ———- —————- ———–
fgedu_server_audit FILE CONTINUE 1 1000
# 创建服务器审计规范
CREATE SERVER AUDIT SPECIFICATION fgedu_server_audit_spec
FOR SERVER AUDIT fgedu_server_audit
ADD (SUCCESSFUL_LOGIN_GROUP),
ADD (FAILED_LOGIN_GROUP),
ADD (LOGOUT_GROUP),
ADD (SERVER_ROLE_MEMBER_CHANGE_GROUP),
ADD (SERVER_PERMISSION_CHANGE_GROUP);
GO
Command(s) completed successfully.
# 启用服务器审计规范
ALTER SERVER AUDIT SPECIFICATION fgedu_server_audit_spec WITH (STATE = ON);
GO
Command(s) completed successfully.
# 查看服务器审计规范
SELECT name, is_state_enabled
FROM sys.server_audit_specifications;
GO
name is_state_enabled
————————— —————-
fgedu_server_audit_spec 1
3.1.2 SQLServer数据库创建数据库级别审计
USE fgedudb;
GO
Changed database context to ‘fgedudb’.
# 创建数据库审计规范
CREATE DATABASE AUDIT SPECIFICATION fgedu_db_audit_spec
FOR SERVER AUDIT fgedu_server_audit
ADD (DATABASE_ROLE_MEMBER_CHANGE_GROUP),
ADD (DATABASE_PERMISSION_CHANGE_GROUP),
ADD (SCHEMA_OBJECT_CHANGE_GROUP),
ADD (SELECT, INSERT, UPDATE, DELETE ON OBJECT::dbo.fgedu_sensitive BY PUBLIC),
ADD (EXECUTE ON OBJECT::dbo.fgedu_sensitive_proc BY PUBLIC);
GO
Command(s) completed successfully.
# 启用数据库审计规范
ALTER DATABASE AUDIT SPECIFICATION fgedu_db_audit_spec WITH (STATE = ON);
GO
Command(s) completed successfully.
# 查看数据库审计规范
SELECT name, is_state_enabled
FROM sys.database_audit_specifications;
GO
name is_state_enabled
——————– —————-
fgedu_db_audit_spec 1
# 查看数据库审计规范详情
SELECT das.name AS SpecName, da.audit_action_name, da.class_desc
FROM sys.database_audit_specifications das
JOIN sys.database_audit_specification_details da
ON das.database_audit_specification_id = da.database_audit_specification_id;
GO
SpecName audit_action_name class_desc
——————– ————————— ———-
fgedu_db_audit_spec DATABASE_ROLE_MEMBER_CHANGE DATABASE
fgedu_db_audit_spec DATABASE_PERMISSION_CHANGE DATABASE
fgedu_db_audit_spec SCHEMA_OBJECT_CHANGE SCHEMA
fgedu_db_audit_spec SELECT OBJECT
fgedu_db_audit_spec INSERT OBJECT
fgedu_db_audit_spec UPDATE OBJECT
fgedu_db_audit_spec DELETE OBJECT
fgedu_db_audit_spec EXECUTE OBJECT
3.2 SQLServer数据库登录审计配置
3.2.1 SQLServer数据库配置登录审计
EXEC xp_loginconfig ‘audit level’;
GO
name config_value
———– ————
audit level none
# 配置登录审计级别
— 仅记录失败登录
EXEC xp_instance_regwrite N’HKEY_LOCAL_MACHINE’,
N’Software\Microsoft\MSSQLServer\MSSQLServer’,
N’AuditLevel’, REG_DWORD, 2;
GO
— 记录成功和失败登录(推荐)
EXEC xp_instance_regwrite N’HKEY_LOCAL_MACHINE’,
N’Software\Microsoft\MSSQLServer\MSSQLServer’,
N’AuditLevel’, REG_DWORD, 3;
GO
Command(s) completed successfully.
# 验证配置
EXEC xp_loginconfig ‘audit level’;
GO
name config_value
———– ————
audit level all
# 重启服务使配置生效
net stop MSSQLSERVER
net start MSSQLSERVER
# 审计级别说明
— 0: 无审计
— 1: 仅成功登录
— 2: 仅失败登录
— 3: 成功和失败登录(推荐)
3.2.2 SQLServer数据库查看错误日志
EXEC xp_readerrorlog 0, 1, ‘Login’;
GO
LogDate ProcessInfo Text
———————— ———– ——————————-
2026-04-08 10:15:32.340 spid51 Login succeeded for user ‘fgedu_app’
2026-04-08 10:16:45.123 spid52 Login failed for user ‘fgedu_test’
2026-04-08 10:18:22.567 spid53 Login succeeded for user ‘fgedu_dba’
# 查看失败登录记录
EXEC xp_readerrorlog 0, 1, ‘Login failed’;
GO
LogDate ProcessInfo Text
———————— ———– —————————————-
2026-04-08 10:16:45.123 spid52 Login failed for user ‘fgedu_test’
2026-04-08 09:30:12.456 spid48 Login failed for user ‘sa’
2026-04-08 08:45:33.789 spid45 Login failed for user ‘admin’
# 查看所有错误日志文件
EXEC xp_enumerrorlogs;
GO
Archive # Date LogFileSize
———– ——————– ————
0 2026-04-08 00:00:00 1256789
1 2026-04-07 00:00:00 2345678
2 2026-04-06 00:00:00 1890123
3 2026-04-05 00:00:00 1567890
4 2026-04-04 00:00:00 1234567
5 2026-04-03 00:00:00 1098765
3.3 SQLServer数据库审计日志查询
3.3.1 SQLServer数据库查询审计日志
SELECT
event_time,
sequence_number,
action_id,
succeeded,
permission_bitmask,
is_column_permission,
session_id,
server_principal_name,
database_name,
schema_name,
object_name,
statement,
additional_information
FROM sys.fn_get_audit_file(‘/sqlserver/audit/*.sqlaudit’, DEFAULT, DEFAULT);
GO
event_time action_id succeeded session_id server_principal_name
———————– ——— ——— ———- ——————–
2026-04-08 10:15:32.340 LGIS 1 51 fgedu_app
2026-04-08 10:16:45.123 LGIF 0 52 fgedu_test
2026-04-08 10:18:22.567 LGIS 1 53 fgedu_dba
2026-04-08 10:20:15.890 SL 1 54 fgedu_app
2026-04-08 10:22:33.456 IN 1 55 fgedu_app
# 查询特定时间段的审计日志
SELECT event_time, action_id, server_principal_name, database_name, statement
FROM sys.fn_get_audit_file(‘/sqlserver/audit/*.sqlaudit’, DEFAULT, DEFAULT)
WHERE event_time BETWEEN ‘2026-04-08 10:00:00’ AND ‘2026-04-08 11:00:00’
ORDER BY event_time;
GO
event_time action_id server_principal_name database_name statement
———————– ——— ——————– ————- ——————–
2026-04-08 10:15:32.340 LGIS fgedu_app fgedudb NULL
2026-04-08 10:18:22.567 LGIS fgedu_dba master NULL
2026-04-08 10:20:15.890 SL fgedu_app fgedudb SELECT * FROM dbo…
2026-04-08 10:22:33.456 IN fgedu_app fgedudb INSERT INTO dbo…
# 查询失败的操作
SELECT event_time, action_id, server_principal_name, database_name, statement
FROM sys.fn_get_audit_file(‘/sqlserver/audit/*.sqlaudit’, DEFAULT, DEFAULT)
WHERE succeeded = 0
ORDER BY event_time DESC;
GO
event_time action_id server_principal_name database_name statement
———————– ——— ——————– ————- ——————–
2026-04-08 10:16:45.123 LGIF fgedu_test master NULL
2026-04-08 09:30:12.456 LGIF sa master NULL
3.3.2 SQLServer数据库创建审计报表
CREATE PROCEDURE sp_fgedu_audit_report
@start_date DATETIME,
@end_date DATETIME
AS
BEGIN
PRINT ‘=== SQLServer审计报告 ===’;
PRINT ‘报告时间范围: ‘ + CONVERT(VARCHAR, @start_date) + ‘ 至 ‘ + CONVERT(VARCHAR, @end_date);
PRINT ”;
— 登录统计
PRINT ‘1. 登录统计:’;
SELECT
server_principal_name AS LoginName,
SUM(CASE WHEN action_id = ‘LGIS’ THEN 1 ELSE 0 END) AS SuccessfulLogins,
SUM(CASE WHEN action_id = ‘LGIF’ THEN 1 ELSE 0 END) AS FailedLogins
FROM sys.fn_get_audit_file(‘/sqlserver/audit/*.sqlaudit’, DEFAULT, DEFAULT)
WHERE event_time BETWEEN @start_date AND @end_date
AND action_id IN (‘LGIS’, ‘LGIF’)
GROUP BY server_principal_name
ORDER BY SuccessfulLogins DESC;
PRINT ”;
PRINT ‘2. 数据访问统计:’;
SELECT
database_name AS DatabaseName,
action_id AS ActionType,
COUNT(*) AS OperationCount
FROM sys.fn_get_audit_file(‘/sqlserver/audit/*.sqlaudit’, DEFAULT, DEFAULT)
WHERE event_time BETWEEN @start_date AND @end_date
AND action_id IN (‘SL’, ‘IN’, ‘UP’, ‘DL’)
GROUP BY database_name, action_id
ORDER BY database_name, action_id;
PRINT ”;
PRINT ‘3. DDL操作统计:’;
SELECT
server_principal_name AS LoginName,
database_name AS DatabaseName,
COUNT(*) AS DDLCount
FROM sys.fn_get_audit_file(‘/sqlserver/audit/*.sqlaudit’, DEFAULT, DEFAULT)
WHERE event_time BETWEEN @start_date AND @end_date
AND action_id IN (‘CR’, ‘AL’, ‘DR’)
GROUP BY server_principal_name, database_name
ORDER BY DDLCount DESC;
END;
GO
Command(s) completed successfully.
# 执行审计报告
EXEC sp_fgedu_audit_report ‘2026-04-01’, ‘2026-04-08’;
GO
=== SQLServer审计报告 ===
报告时间范围: 2026-04-01 00:00:00 至 2026-04-08 00:00:00
1. 登录统计:
LoginName SuccessfulLogins FailedLogins
———– —————- ————
fgedu_app 1256 0
fgedu_dba 456 0
fgedu_read 234 0
sa 0 12
2. 数据访问统计:
DatabaseName ActionType OperationCount
———— ———- ————–
fgedudb DL 45
fgedudb IN 1234
fgedudb SL 15678
fgedudb UP 567
3. DDL操作统计:
LoginName DatabaseName DDLCount
———– ———— ——–
fgedu_dba fgedudb 12
fgedu_dev fgedudb 5
Part04-生产案例与实战讲解
4.1 SQLServer数据库敏感数据访问审计案例
# 实施步骤:
# 1. 创建敏感数据审计
USE fgedudb;
GO
CREATE DATABASE AUDIT SPECIFICATION fgedu_sensitive_audit
FOR SERVER AUDIT fgedu_server_audit
ADD (SELECT ON OBJECT::dbo.fgedu_customer BY PUBLIC),
ADD (SELECT ON OBJECT::dbo.fgedu_salary BY PUBLIC),
ADD (SELECT ON OBJECT::dbo.fgedu_financial BY PUBLIC);
GO
Command(s) completed successfully.
# 2. 启用审计
ALTER DATABASE AUDIT SPECIFICATION fgedu_sensitive_audit WITH (STATE = ON);
GO
Command(s) completed successfully.
# 3. 模拟敏感数据访问
SELECT * FROM dbo.fgedu_customer WHERE customer_id = 1001;
GO
customer_id customer_name phone email
———– ————- ———— ——————-
1001 张三 13800138000 zhangsan@fgedu.cn
# 4. 查询敏感数据访问记录
SELECT
event_time,
server_principal_name AS LoginName,
database_name AS DatabaseName,
schema_name AS SchemaName,
object_name AS ObjectName,
statement
FROM sys.fn_get_audit_file(‘/sqlserver/audit/*.sqlaudit’, DEFAULT, DEFAULT)
WHERE object_name IN (‘fgedu_customer’, ‘fgedu_salary’, ‘fgedu_financial’)
AND action_id = ‘SL’
ORDER BY event_time DESC;
GO
event_time LoginName DatabaseName SchemaName ObjectName statement
———————– ———- ———— ———- ————— ——————–
2026-04-08 10:30:15.123 fgedu_dba fgedudb dbo fgedu_customer SELECT * FROM dbo…
2026-04-08 10:25:33.456 fgedu_app fgedudb dbo fgedu_customer SELECT * FROM dbo…
2026-04-08 10:20:22.789 fgedu_read fgedudb dbo fgedu_salary SELECT * FROM dbo…
# 5. 创建敏感访问告警
CREATE PROCEDURE sp_fgedu_sensitive_access_alert
AS
BEGIN
DECLARE @alert_count INT;
SELECT @alert_count = COUNT(*)
FROM sys.fn_get_audit_file(‘/sqlserver/audit/*.sqlaudit’, DEFAULT, DEFAULT)
WHERE object_name IN (‘fgedu_customer’, ‘fgedu_salary’, ‘fgedu_financial’)
AND action_id = ‘SL’
AND event_time > DATEADD(HOUR, -1, GETDATE());
IF @alert_count > 100
BEGIN
PRINT ‘警告: 最近1小时敏感数据访问次数过多: ‘ + CAST(@alert_count AS VARCHAR);
— 可以发送邮件告警
END
END;
GO
Command(s) completed successfully.
4.2 SQLServer数据库DDL变更审计案例
# 实施步骤:
# 1. 创建DDL审计规范
USE fgedudb;
GO
CREATE DATABASE AUDIT SPECIFICATION fgedu_ddl_audit
FOR SERVER AUDIT fgedu_server_audit
ADD (DATABASE_OBJECT_CHANGE_GROUP);
GO
Command(s) completed successfully.
# 2. 启用审计
ALTER DATABASE AUDIT SPECIFICATION fgedu_ddl_audit WITH (STATE = ON);
GO
Command(s) completed successfully.
# 3. 模拟DDL操作
CREATE TABLE dbo.fgedu_test_audit (
id INT PRIMARY KEY,
name VARCHAR(100)
);
GO
Command(s) completed successfully.
ALTER TABLE dbo.fgedu_test_audit ADD create_time DATETIME DEFAULT GETDATE();
GO
Command(s) completed successfully.
DROP TABLE dbo.fgedu_test_audit;
GO
Command(s) completed successfully.
# 4. 查询DDL审计记录
SELECT
event_time,
action_id,
server_principal_name AS LoginName,
database_name AS DatabaseName,
schema_name AS SchemaName,
object_name AS ObjectName,
statement
FROM sys.fn_get_audit_file(‘/sqlserver/audit/*.sqlaudit’, DEFAULT, DEFAULT)
WHERE action_id IN (‘CR’, ‘AL’, ‘DR’)
ORDER BY event_time DESC;
GO
event_time action_id LoginName DatabaseName SchemaName ObjectName statement
———————– ——— ———- ———— ———- —————– ——————–
2026-04-08 10:35:22.123 DR fgedu_dba fgedudb dbo fgedu_test_audit DROP TABLE dbo…
2026-04-08 10:34:15.456 AL fgedu_dba fgedudb dbo fgedu_test_audit ALTER TABLE dbo…
2026-04-08 10:33:08.789 CR fgedu_dba fgedudb dbo fgedu_test_audit CREATE TABLE dbo…
# 5. 创建DDL变更历史表
CREATE TABLE dbo.fgedu_ddl_history (
id INT IDENTITY PRIMARY KEY,
event_time DATETIME,
login_name NVARCHAR(128),
database_name NVARCHAR(128),
object_name NVARCHAR(128),
action_type NVARCHAR(10),
statement NVARCHAR(MAX),
create_time DATETIME DEFAULT GETDATE()
);
GO
Command(s) completed successfully.
# 6. 创建DDL变更归档存储过程
CREATE PROCEDURE sp_fgedu_archive_ddl_changes
AS
BEGIN
INSERT INTO dbo.fgedu_ddl_history (
event_time, login_name, database_name, object_name, action_type, statement
)
SELECT
event_time,
server_principal_name,
database_name,
object_name,
action_id,
statement
FROM sys.fn_get_audit_file(‘/sqlserver/audit/*.sqlaudit’, DEFAULT, DEFAULT)
WHERE action_id IN (‘CR’, ‘AL’, ‘DR’)
AND event_time > (SELECT ISNULL(MAX(event_time), ‘1900-01-01’) FROM dbo.fgedu_ddl_history);
END;
GO
Command(s) completed successfully.
4.3 SQLServer数据库审计问题解决方案
# 问题1:审计日志文件过大
# 解决方案:配置文件滚动和清理
— 查看当前审计文件配置
SELECT name, type_desc, max_size, max_rollover_files
FROM sys.server_audits;
GO
name type_desc max_size max_rollover_files
——————– ——— ——– ——————
fgedu_server_audit FILE 100 MB 100
— 修改审计配置
ALTER SERVER AUDIT fgedu_server_audit
MODIFY NAME = fgedu_server_audit;
ALTER SERVER AUDIT fgedu_server_audit
TO FILE (MAXSIZE = 200 MB, MAX_ROLLOVER_FILES = 50);
GO
Command(s) completed successfully.
# 问题2:审计影响性能
# 解决方案:优化审计配置
— 查看审计队列延迟
SELECT name, queue_delay, on_failure
FROM sys.server_audits;
GO
name queue_delay on_failure
——————– ———– ———-
fgedu_server_audit 1000 CONTINUE
— 增加队列延迟减少性能影响
ALTER SERVER AUDIT fgedu_server_audit
WITH (QUEUE_DELAY = 5000);
GO
Command(s) completed successfully.
# 问题3:审计日志丢失
# 解决方案:配置失败处理策略
— 查看当前失败处理策略
SELECT name, on_failure, is_state_enabled
FROM sys.server_audits;
GO
— 配置失败时关闭服务器
ALTER SERVER AUDIT fgedu_server_audit
WITH (ON_FAILURE = SHUTDOWN);
GO
Command(s) completed successfully.
# 问题4:审计日志查询慢
# 解决方案:定期归档和清理
— 创建审计日志归档存储过程
CREATE PROCEDURE sp_fgedu_archive_audit_logs
AS
BEGIN
DECLARE @archive_path NVARCHAR(256);
SET @archive_path = ‘/sqlserver/audit/archive/’;
— 移动超过30天的审计文件到归档目录
— 实际环境可以使用操作系统命令或SSIS包
PRINT ‘归档审计日志到: ‘ + @archive_path;
END;
GO
Command(s) completed successfully.
Part05-风哥经验总结与分享
5.1 SQLServer数据库日志审计最佳实践
SQLServer数据库日志审计最佳实践:
- 分层审计:服务器级别+数据库级别+对象级别
- 重点审计:重点审计敏感数据和关键操作
- 性能平衡:平衡审计需求与性能影响
- 日志管理:定期归档和清理审计日志
- 定期审查:定期审查审计策略和日志
- 告警机制:建立审计异常告警机制
5.2 SQLServer数据库审计检查清单
1. 审计配置检查
[ ] 服务器审计是否启用
[ ] 服务器审计规范是否配置
[ ] 数据库审计规范是否配置
[ ] 登录审计是否启用
2. 审计内容检查
[ ] 登录成功和失败是否审计
[ ] 权限变更是否审计
[ ] 敏感数据访问是否审计
[ ] DDL操作是否审计
3. 审计存储检查
[ ] 审计日志存储位置是否合理
[ ] 文件滚动配置是否合理
[ ] 磁盘空间是否充足
[ ] 日志保留策略是否合理
4. 审计性能检查
[ ] 审计性能影响是否可接受
[ ] 队列延迟配置是否合理
[ ] 是否有性能监控
5. 审计管理检查
[ ] 是否定期审查审计日志
[ ] 是否有审计报告
[ ] 是否有告警机制
[ ] 是否有日志归档流程
5.3 SQLServer数据库审计工具推荐
SQLServer数据库审计工具推荐:
- SQL Server Audit:内置企业级审计功能
- Extended Events:轻量级事件监控
- SQL Server Profiler:图形化跟踪工具
- 第三方审计工具:专业的数据库审计解决方案
- SIEM系统:安全信息和事件管理系统
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
