达梦数据库-数据库审计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/

相关推荐
A-刘晨阳2 小时前
AI原生时序数据库选型指南:从数据存储到智能决策的范式跃迁
数据库·时序数据库·ai-native
HalvmånEver3 小时前
MySQL的增删改查命令合集合集
数据库·sql·oracle
不剪发的Tony老师4 小时前
dblab:一款基于终端的交互式数据库客户端
数据库·sql
xwz小王子4 小时前
Science Robotics基础模型正在改写机器人集群的“游戏规则”
数据库·人工智能·机器人
茉莉玫瑰花茶5 小时前
LangGraph 介绍
服务器·网络·数据库
倒霉蛋小马5 小时前
【Redis】利用Redis构造全局唯一ID
数据库
夕除5 小时前
springboot--06
数据库·spring boot·mybatis
2401_833033625 小时前
golang如何实现MQTT主题通配符路由_golang MQTT主题通配符路由实现策略
jvm·数据库·python
运维小子6 小时前
JumpServer Applet 发布自定义远程应用:Oracle SQL Developer 自动登录
数据库·sql·oracle·jumpserver
m0_596749096 小时前
Golang怎么实现方法集与接口的匹配_Golang如何理解值类型和指针类型实现接口的区别【详解】
jvm·数据库·python