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

相关推荐
2401_883600252 小时前
MySQL如何备份非常大的数据库_mydumper多线程逻辑导出工具
jvm·数据库·python
djjdjdjdjjdj2 小时前
CSS如何设置文本的描边颜色_通过text-stroke设置css字体轮廓
jvm·数据库·python
m0_514520572 小时前
HTML5中LocalStorage存储动态CSS变量实现换肤
jvm·数据库·python
m0_377618232 小时前
C#怎么实现蓝牙设备搜索_C#如何开发Bluetooth应用【指南】
jvm·数据库·python
m0_674294642 小时前
golang如何处理PostgreSQL JSONB字段_golang PostgreSQL JSONB字段处理方法
jvm·数据库·python
Kethy__2 小时前
计算机中级-数据库系统工程师-关系运算(2)
数据库·软考·数据库系统工程师·计算机中级
2301_775148152 小时前
Go语言怎么做接口签名_Go语言API签名验证教程【精通】
jvm·数据库·python
m0_493934532 小时前
Chrome 75 不支持 arrayBuffer() 方法:替代方案详解
jvm·数据库·python
qq_372906932 小时前
MySQL数据库提示表损坏怎么修复_使用REPAIR TABLE修复方案
jvm·数据库·python