达梦数据库-数据库审计01-记录总结

达梦数据库-数据库审计01-记录总结

审计机制是安全管理的重要组成部分之一。DM 数据库除了提供数据安全保护措施外,还提供对日常事件的事后审计监督。可以通过它来记录系统级事件、用户行为以及对数据库对象的访问。

本节主要介绍审计文件路径设置,审计开关,语句级审计及示例操作。

1.1审计 文件

审计文件默认存放在数据库的 SYSTEM_PATH 指定的路径(数据库实例路径)。

可在dm.ini文件中添加参数AUD_PATH来指定审计文件路径。

(1)查询默认审计文件存放路径

select PARA_NAME,PARA_VALUE from v$dm_ini where PARA_NAME='SYSTEM_PATH';

--查询审计文件存储空间信息

select * from V$AUDIT_SPACE;

(2)提前创建

mkdir /data/dmdata/DAMENG/aud_pathlog

否则启动时报错

(3)修改dm_ini新增AUD_PATH参数与值

AUD_PATH = /data/dmdata/DAMENG/aud_pathlog #重启生效

1.2审计开关

审计开关由过程SP_SET_ENABLE_AUDIT(param int);控制,过程执行完后会立即生效,param 有三种取值:

0:关闭审计,缺省值0

1:打开普通审计

2:打开普通审计和实时审计

#审计开关必须由具有数据库审计员权限的管理员(如SYSAUDITOR用户)进行设置。

(1)查询审计开关当前值。

SELECT PARA_NAME,PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='ENABLE_AUDIT';

(2)SYSAUDITOR用户开启普通审计

SP_SET_ENABLE_AUDIT(1);

--SYSAUDITOR用户关闭普通审计

SP_SET_ENABLE_AUDIT(0);

(3)数据库服务重启后审计文件存储空间信息

select * from V$AUDIT_SPACE;

--查看审计文件

select * from V$AUDIT_FILE;

--审计相关参数

select PARA_NAME,PARA_VALUE from v$dm_ini where para_name like '%AUDIT%';

1.3审计级别

|-----|---------------------------------------------------|
| 系统级 | 系统启动、关闭、部分系统事件以及一些系统过程和函数的调用,用户不能设置,审计开关打开就会自动生成; |
| 语句级 | 影响特定类型数据库对象的特殊SQL或语句组的审计; 语句级审计不针对特定的对象,只针对用户; |
| 对象级 | 审计作用在特殊对象上的语句。 针对指定用户与指定对象进行审计; |

系统级 :系统级审计无法也无需由用户进行设置,只要审计开关打开就会自动生成对应审计记录。语句级:语句级审计的动作是全局的,不对应具体的数据库对象。

对象级:对象级审计发生在具体的对象上,需要指定模式名以及对象名

**语句序列审计:**语句序列审计需要审计员预先建立审计规则,包含N条SQL语句,如果某个会话执行了这些 SQL语句,就会触发审计。

具体详细参见 https://eco.dameng.com/document/dm/zh-cn/pm/audit.html

1.3.1系统级

​​​​​​​1.3.2语句级

语句级审计的动作是全局的,不对应具体的数据库对象。

​​​​​​​1.3.1.1审计语句

SP_AUDIT_STMT与SP_NOAUDIT_STMT

设置语句级审计:

SP_AUDIT_STMT(TYPE VARCHAR(30), USERNAME VARCHAR (128), WHENEVER VARCHAR (20) )

取消语句级审计:

SP_NOAUDIT_STMT(TYPE VARCHAR(30), USERNAME VARCHAR (128), WHENEVER VARCHAR (20) )

TYPE 语句级审计选项

USERNAME 待被审计的用户名,NULL表示不限制

WHENEVER 审计时机,ALL所有,SUCCESSFUL操作成功时审计,FAIL操作失败时审计

注: 取消审计语句和设置审计语句 匹配

​​​​​​​1.3.2.1审计策略查询

审计设置存放于字典表SYSAUDIT中,进行一次审计设置就在SYSAUDIT中增加一条对应的记录,取消审计则删除SYSAUDIT中相应的记录。

select * from SYSAUDIT;

select sf_get_audit_levelname(level) level,

sf_get_audit_typename(type) type,

sf_get_audit_whenevername("WHENEVER") whenerverl,

sf_get_tablename_by_id(decode(tvpid,-1,null,tvpid)) tablename,

sf_get_username_by_id (uid) uname

from sysaudit;

​​​​​​​1.3.2.2审计示例操作

(1)sysdba提前创建测试用户

create user TESTS identified by "HUN_admin2026";

grant "PUBLIC","RESOURCE","SOI","SVI","VTI" to TESTS;

(2)SYSAUDITOR设置审计策略

--对SYSDBA创建、修改、删除用户成功进行审计

SP_AUDIT_STMT('USER', 'SYSDBA', 'SUCCESSFUL');

--审计表的创建、修改、删除和清空

审计所有用户表的创建、修改、删除和清空,不管操作成功还是失败都审计

SP_AUDIT_STMT('TABLE', 'NULL', 'ALL');

--对用户tests进行的表数据的增删改查进行审计,不管操作失败和成功都审计

SP_AUDIT_STMT('INSERT TABLE', 'TESTS', 'ALL');

SP_AUDIT_STMT('DELETE TABLE', 'TESTS', 'ALL');

SP_AUDIT_STMT('UPDATE TABLE', 'TESTS', 'ALL');

select * from SYSAUDIT;

(3)SYSDBA创建、修改、删除用户

create user TEST1 identified by "HUN_admin2026";

grant "PUBLIC","RESOURCE","SOI","SVI","VTI" to TEST1;

drop user TEST1 cascade;

-查询审计记录

select USERNAME,OPERATION,SQL_TEXT,OPTIME from V$AUDITRECORDS ORDER BY OPTIME DESC limit 10;

(4)SYSDBA创建、修改、清空表操作

create table test3(id int,name char(10));

create table test4(id int,name char(10));

alter table test3 ADD COLUMN info char(10);

insert into test3 VALUES (1,'t1','info1');

commit;

truncate table test3;

--查询审计记录

select USERNAME,OPERATION,SQL_TEXT,OPTIME from V$AUDITRECORDS ORDER BY OPTIME DESC limit 10;

(5)tests创建表并进行增删改查操作

create table tests(id int,name char(10));

insert into tests VALUES (1,'t1');

insert into tests VALUES (2,'t2');

update tests set name='t1ss' where id=1;

delete from tests where id=1;

commit;

select * from tests;

--查询审计记录

select USERNAME,OPERATION,SQL_TEXT,OPTIME from V$AUDITRECORDS ORDER BY OPTIME DESC limit 10;

(6)SYSAUDITOR取消审计策略

--取消对表的创建、修改、删除和清空的审计。

SP_NOAUDIT_STMT('TABLE', 'NULL', 'ALL');

--取消对 SYSDBA 创建、修改、删除用户成功进行审计。

SP_NOAUDIT_STMT('USER', 'SYSDBA', 'SUCCESSFUL');

--取消对用户tests进行的表的修改和删除的审计。

SP_NOAUDIT_STMT('INSERT TABLE', 'TESTS', 'ALL');

SP_NOAUDIT_STMT('DELETE TABLE', 'TESTS', 'ALL');

SP_NOAUDIT_STMT('UPDATE TABLE', 'TESTS', 'ALL');

--查询审计策略

select * from SYSAUDIT;

select sf_get_audit_levelname(level) level,

sf_get_audit_typename(type) type,

sf_get_audit_whenevername("WHENEVER") whenerverl,

sf_get_tablename_by_id(decode(tvpid,-1,null,tvpid)) tablename,

sf_get_username_by_id (uid) uname

from sysaudit;

--sysdba清理测试环境

drop TABLE test3;drop table tests.tests;

更多达梦数据库运维指南、在线文档、相关资料、社区在线提问以及技术分享

访问 https://eco.dameng.com/

相关推荐
隔窗听雨眠12 小时前
记一次SQL Server数据库性能分析:从CPU100%到单配置修复的完整诊断
开发语言·数据库·php
samson_www13 小时前
Oracle数据泵拷贝表空间
数据库·dba
呆萌很13 小时前
MySQL 8.4 LTS 完整安装教程
数据库·mysql
天空'之城14 小时前
单片机基础核心知识点汇总(三十三)
数据库·单片机·嵌入式硬件
爱吃苹果的日记本15 小时前
数据结构第一课
c语言·数据结构·数据库·学习·c#
张小姐的猫16 小时前
【AI大模型接入SDK】 —— Gemini接入封装
android·数据结构·数据库·c++·人工智能·python
Thomas214316 小时前
mysql 索引面试复习
数据库·mysql·面试
Elastic 中国社区官方博客16 小时前
Elasticsearch Python DSL 客户端开发
大数据·数据库·python·elasticsearch·搜索引擎·全文检索
风哥2号16 小时前
数据库教程FGMT03‑生产环境Linux+Oracle19c+ASM安装配置与项目实战
linux·数据库