【达梦数据库】审计功能开启审计记录&查看&定时删除


在使用达梦过程中,客户需要开启登录日志、操作日志、运行日志,并保留6个月日志数据,在处理问题过程中做以下记录:

1、开启审计记录

1.1、查看审计日志大小限制

DBA用户查看审计日志大小,AUDIT_MAX_FILE_SIZE为系统动态参数

SELECT SF_GET_PARA_VALUE(1,'AUDIT_MAX_FILE_SIZE');

DBA用户修改审计日志大小,默认100M,范围:1-40960M,AUDIT_MAX_FILE_SIZE系统动态参数

SP_SET_PARA_VALUE(1,'AUDIT_MAX_FILE_SIZE',200)

1.2、开启审计日志开关

SYSAUDITOR用户开启审计日志开关,0:关闭审计,1:打开普通审计,2:打开普通审计和实时审计

SP_SET_ENABLE_AUDIT (1);

1.3、设置审计规则

SYSAUDITOR用户设置审计规则,以用户需求为准,SYSDBA和常用用户(如:SCMWSAPI、EULER)建议设置CONNET\DELETE TABLE粒度

SP_AUDIT_STMT('DELETE TABLE', 'SYSDBA', 'ALL');
SP_AUDIT_STMT('CONNECT', 'SYSDBA', 'ALL');
SP_AUDIT_STMT('DELETE TABLE', 'SCMWSAPI', 'ALL');
SP_AUDIT_STMT('CONNECT', 'SCMWSAPI', 'ALL');
SP_AUDIT_STMT('DELETE TABLE', 'EULER', 'ALL');
SP_AUDIT_STMT('CONNECT', 'EULER', 'ALL');

也可以图像化设置: 达梦数据库审计功能开启及审计记录查看

2、查看审计记录

SYSAUDITOR用户查看审计记录

select * from v$AUDITRECORDS ORDER BY OPTIME DESC;

3、删除审计记录

3.1、删除指定日期之前的审计记录-手动

SYSAUDITOR用户删除指定日期之前的审计日志,0 表示删除普通审计文件,1 表示删除实时审计文件

SP_DROP_AUDIT_FILE('2024-8-23 14:30:00',0);

3.2、删除指定日期之前的审计记录-定时作业(作废

使用SYSDBA用户创建作业,执行作业会提示:没有审计权限

前提初始化代理,倘若未初始化代理,请用SYSDBA(DBA)执行函数创建系统作业表

SP_INIT_JOB_SYS(1);

DBA用户设置,保留半年的审计日志,即6个月。

call SP_CREATE_JOB('PURGE_AUDIT',1,0,'',0,0,'',0,'清理6个月前的审计文件');
call SP_JOB_CONFIG_START('PURGE_AUDIT');
call SP_ADD_JOB_STEP('PURGE_AUDIT', 'STEP1', 0, 'SP_DROP_AUDIT_FILE(now()-180,0)', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('PURGE_AUDIT', 'purge1', 1, 1, 1, 0, 0, '23:30:00', NULL, '2024-02-23 00:00:00', NULL, '');
call SP_JOB_CONFIG_COMMIT('PURGE_AUDIT');

如创建失败,可删除作业

call SP_DROP_JOB('PURGE_AUDIT');

参考链接: 定期清理审计日志

3.3、使用shell脚本删除

#!/bin/bash  
#############################脚本描述,区域开始##############################
## Filename : 
## Write by lpb
## Descript : 删除6个月前的审计日志,本脚本必须以dmdba用户执行
#############################脚本描述,区域结束############################## 

#############################配置路径信息-必填##############################
#指定日志文件存储的目录  
search_dir="/dmdata/DAMENG" 
#############################配置路径信息-必填##############################


#############################内部逻辑处理##############################  
# 检查是否为dmdba用户  
if [ ! "x$(whoami)" = "xdmdba" ]; then 
  echo "必须以dmdba用户执行此脚本!" >&2
  exit 1
fi

# 切换到该目录(如果它存在的话)  
if [ -d "$search_dir" ]; then  
    cd "$search_dir" || exit 1  # 如果cd失败,则退出脚本  
else  
    echo "Directory $search_dir does not exist."  
    exit 1  
fi 

# 计算6个月前的日期(仅年份和月份)  
six_months_ago=$(date -d "6 months ago" +%Y-%m) 

# 使用find命令在当前目录下搜索符合条件的文件  
find . -type f -name "AUDIT*.log" | while read file; do  
    # 注意:这里的$file已经是相对路径了  
  
    # 使用正则表达式匹配并捕获日期部分 
	if [[ "$file" =~ AUDIT_[^_]*_[^_]*_([0-9]{4})-([0-9]{1,2})-[^_]*\.log$ ]]; then
        # 提取年份和月份  
        year="${BASH_REMATCH[1]}"  
        month="${BASH_REMATCH[2]}"  
  
        # 格式化月份(虽然在这个比较中可能不是必需的)  
        month=$(printf "%02d" "$month")  
  
        # 构造要比较的年月字符串  
        file_year_month="${year}-${month}"  
  
        # 比较年月  
        if [[ "$file_year_month" < "$six_months_ago" ]]; then    
            # 删除文件  
            rm "$file"
			echo "Deleted: $file"
        fi  
    fi  
done  

4、其他

删除ELOG文件

#删除文件名为”dm_DMSEVER_202209.log”的本地日志文件:
SP_ELOG_FILE_DELETE('DM_DMSEVER_202209.LOG');

#删除文件名为”dm_DMSEVER_202209.log”的站点为0的服务器日志文件:
SP_ELOG_FILE_DELETE(0,'DM_DMSEVER_202209.LOG');

#查看ELOG文件
select * from v$ELOG_FILE;

在这里插入图片描述

或者使用shell脚本

#!/bin/bash  
#############################脚本描述,区域开始##############################
## Filename : 
## Write by lpb
## Descript : 删除6个月前的运行日志,本脚本必须以dmdba用户执行
#############################脚本描述,区域结束############################## 

#############################配置路径信息-必填##############################
#指定日志文件存储的目录
LOG_DIR="/home/dmdba/dmdbms/log"  
#############################配置路径信息-必填##############################


#############################内部逻辑处理############################## 
# 检查是否为dmdba用户  
if [ ! "x$(whoami)" = "xdmdba" ]; then 
  echo "必须以dmdba用户执行此脚本!" >&2
  exit 1
fi
  
# 进入日志文件目录  
if [ -d "$LOG_DIR" ]; then  
    cd "$LOG_DIR" || exit 1  # 如果cd失败,则退出脚本  
else  
    echo "Directory $LOG_DIR does not exist."  
    exit 1  
fi 

# 计算6个月前的日期(仅年份和月份)  
SIX_MONTHS_AGO=$(date -d "6 months ago" +%Y%m)  

# 查找并删除符合条件的日志文件  
find . -type f -name "*.log" | while read file; do  
    # 提取文件名中的日期部分(YYYYMMif [[ "$file" =~ dm_.*_([0-9]{4})([0-9]{2})\.log$ ]]; then  
        file_date="${BASH_REMATCH[1]}${BASH_REMATCH[2]}"  
  
        # 比较文件日期与6个月前的日期  
        if [ "$file_date" "<" "$SIX_MONTHS_AGO" ]; then  
            # 删除文件  
            rm "$file"  
            echo "Deleted: $file"  
        fi  
    fi  
done  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值