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

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

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

本节上接达梦数据库-数据库审计01-记录总结,主要介绍对象级审计及示例操作。

1.3.3对象级

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

|----------------------------------------------------|---------------|--------------|-------------|----------------------------|-----------------|
| 审计选项(SYSAUDITRECORDS 表中 operation 字段对应的内容) | TABLE | VIEW | COL | PROCEDURE FUNCTION | TRIGGER |
| INSERT | √ | √ | √ | | |
| UPDATE | √ | √ | √ | | |
| DELETE | √ | √ | √ | | |
| SELECT | √ | √ | √ | | |
| EXECUTE | | | | √ | |
| MERGE INTO | √ | √ | | | |
| EXECUTE TRIGGER | | | | | √ |
| LOCK TABLE | √ | | | | |
| BACKUP TABLE | √ | | | | |
| RESTORE TABLE | √ | | | | |
| ALL 所有对象级审计选项 | √ | √ | √ | √ | √ |

​​​​​​​1.3.3.1审计语句

SP_AUDIT_OBJECT与SP_NOAUDIT_OBJECT

设置审计

SP_AUDIT_OBJECT ( TYPE VARCHAR(30), USERNAME VARCHAR (128), SCHNAME VARCHAR (128), TVNAME VARCHAR (128), WHENEVER VARCHAR (20) )

SP_AUDIT_OBJECT ( TYPE VARCHAR(30), USERNAME VARCHAR (128), SCHNAME VARCHAR (128), TVNAME VARCHAR (128), COLNAME VARCHAR (128), WHENEVER VARCHAR (20) )

TYPE 对象级审计选项

USERNAME 用户名。为空串或 NULL 时表示不限定用户

SCHNAME 模式名。为空串或 NULL 时表示不限定模式

TVNAME 表名、视图名、存储过程名。不支持取值为空串或NULL

COLNAME 列名。为空串或NULL时表示不限定列

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

取消审计

取消审计语句和设置审计语句只有完全匹配的才可以取消审计,否则无法取消审计。

SP_NOAUDIT_OBJECT ( TYPE VARCHAR(30), USERNAME VARCHAR (128), SCHNAME VARCHAR (128), TVNAME VARCHAR (128), WHENEVER VARCHAR (20) )

SP_NOAUDIT_OBJECT ( TYPE VARCHAR(30), USERNAME VARCHAR (128), SCHNAME VARCHAR (128), TVNAME VARCHAR (128), COLNAME VARCHAR (128), WHENEVER VARCHAR (20) )

​​​​​​​1.3.3.2审计策略查询

select * from SYSAUDIT;

SELECT

CASE WHEN NLEVEL='SP_AUDIT_STMT' THEN NLEVEL||'('''||NTYPE||''','''||NUID||''','''||NWHENEVER||''');'

WHEN NLEVEL='SP_AUDIT_OBJECT' THEN NLEVEL||'('''||NTYPE||''','''||NUID||''','''||SCH||''','''||TAB||''','''||NWHENEVER||''');'

ELSE 'ERROR' end as DDLS

FROM (

select decode(level,'1','SP_AUDIT_STMT','2','SP_AUDIT_OBJECT',level) AS NLEVEL

,case when uid='-1' then 'ALL' WHEN UID!='-1' THEN (select B.username from all_users B where b.user_id=a.UID) ELSE UID end as NUID

,decode(A."TYPE",'12','USER','15','TABLE','32','DELETE TABLE','33','UPDATE TABLE','30','INSERT TABLE','31','SELECT TABLE','50','INSERT','51','SELECT','52','DELETE','53','UPDATE',A."TYPE") AS NTYPE

, (SELECT Y.NAME FROM SYSOBJECTS Y WHERE ID=(SELECT X.SCHID FROM SYSOBJECTS X WHERE X.ID=A.TVPID) AND SUBTYPE$ is NULL) as SCH

,(SELECT Z.NAME FROM SYSOBJECTS Z WHERE Z.ID=A.TVPID) AS TAB

,decode(A."WHENEVER",'1','SUCCESSFUL','2','FAIL','3','ALL',A."WHENEVER") as NWHENEVER

from

sysauditor.sysaudit A);

​​​​​​​1.3.3.3审计示例操作

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

create user TESTS identified by "HUN_admin2026";

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

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

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

(2)SYSAUDITOR设置审计策略

--对SYSDBA对表TESTS.TESTS进行的增删改查成功时进行审计。

SP_AUDIT_OBJECT('INSERT', 'SYSDBA', 'TESTS', 'TESTS', 'SUCCESSFUL');

SP_AUDIT_OBJECT('DELETE', 'SYSDBA', 'TESTS', 'TESTS', 'SUCCESSFUL');

SP_AUDIT_OBJECT('UPDATE', 'SYSDBA', 'TESTS', 'TESTS', 'SUCCESSFUL');

SP_AUDIT_OBJECT('SELECT', 'SYSDBA', 'TESTS', 'TESTS', 'SUCCESSFUL');

--对SYSDBA对表TESTS.TESTS的NAME列进行修改成功的操作进行审计。

SP_AUDIT_OBJECT('UPDATE','SYSDBA','TESTS','TESTSS','NAME','SUCCESSFUL');

--查看审计策略

(3) SYSDBA对测试表各种操作-示例

--TESTS用户登录数据库后增删改查表tests

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

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

insert into testss values(1,'t1ss');

update tests set name='t2u' where id=2;

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;

--SYSDBA用户登录数据库后增删改查表tests和改testss表

insert into tests.tests values(3,'systuser1');

insert into tests.tests values(4,'systuser2');

update tests.tests set name='tuser2sys' where id=4;

delete from tests.tests where id=3;

commit;

select * from tests.tests;

update tests.testss set name='sysss' where id=1;

commit;

select * from tests.testss;

--查询审计记录

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

(4)SYSAUDITOR取消审计策略

取消审计语句和设置审计语句需要完全匹配

--取消对SYSDBA对表TESTS.TESTS进行的增删改查成功时进行审计。

SP_NOAUDIT_OBJECT('INSERT', 'SYSDBA', 'TESTS', 'TESTS', 'SUCCESSFUL');

SP_NOAUDIT_OBJECT('DELETE', 'SYSDBA', 'TESTS', 'TESTS', 'SUCCESSFUL');

SP_NOAUDIT_OBJECT('UPDATE', 'SYSDBA', 'TESTS', 'TESTS', 'SUCCESSFUL');

SP_NOAUDIT_OBJECT('SELECT', 'SYSDBA', 'TESTS', 'TESTS', 'SUCCESSFUL');

--取消对SYSDBA对表TESTS.TESTS的NAME列进行修改成功的操作进行审计。

SP_NOAUDIT_OBJECT('UPDATE','SYSDBA','TESTS','TESTSS','NAME','SUCCESSFUL');

--查询审计策略

select * from SYSAUDIT;

--sysdba清理测试环境

drop user TESTS cascade;

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

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

相关推荐
名不经传的养虾人8 分钟前
从0到1:企业级AI项目迭代日记 Vol.65|最危险的故障不是崩溃,是悄悄换掉了正确答案
数据库·人工智能·ai编程·ai-agent·企业ai
程序员佳佳12 分钟前
模型网关灰度不是调百分比:把放量、观测和回滚做成账本
java·数据库·人工智能·redis·gpt·aigc·embedding
绩隐金18 分钟前
用AI开了本小说 九折归潮
数据库
heimeiyingwang20 分钟前
【架构实战】MySQL索引优化:从慢查询到毫秒响应
数据库·mysql·架构
得闲喝茶20 分钟前
跨表数据匹配——VLOOKUP、XLOOKUP
大数据·数据库·笔记·信息可视化·数据分析·excel
snow@li37 分钟前
数据库:如何设计最佳索引 / 数据库最佳索引设计指南
数据库
渣渣灰飞1 小时前
MySQL 系统学习 第二阶段 第四章:DCL(Data Control Language)第二节:权限管理与角色(Role)
数据库·学习·mysql
肖永威1 小时前
金仓数据库麒麟环境SQL终端使用入门实践(增删改查篇)
数据库·sql·金仓数据库
m0_715674431 小时前
2026年医疗行业数据库风险监测产品综合能力排名分析
网络·数据库
渣渣灰飞2 小时前
MySQL 系统学习 第四阶段:MySQL 高级 第一节:索引(Index)
数据库·学习·mysql