暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

干货分享丨DM8数据库审计

达梦大数据 2020-11-02
1573

关于干货分享栏目的迁移公告

为进一步优化广大用户的使用和阅读体验,能够给大家提供更优质、更高效的信息和技术服务,达梦公司官方微信公众平台“达梦大数据”中的干货分享内容后续推广将转移至达梦大学

达梦公司本着“以人为本”的理念,成立达梦大学。达梦大学是达梦数据库管理系统及相关产品知识普及、培训服务、教育合作等全方位的人才培养体系,推动教育与创新,助力数据库产业链培养储备人才的教育项目。

2020年10月20日,达梦大学微信公众号正式上线!达梦大学微信公众号主要致力于为广大学员提供最新培训动态分享技术干货知识前沿行业动态。达梦大学将充分利用公众平台,为大家提供优质的互动体验,提供更多培训资讯!

“达梦大学”公众号关注方式:

1、打开微信,在添加朋友中搜索公众号“达梦大学”,关注公众号;

2、打开微信,扫描下方二维码,关注公众号。

欢迎关注“达梦大学”

以下为本期干货分享内容:

审计机制是DM数据库管理系统安全管理的重要组成部分之一。DM具有一个灵活的审计子系统,可以通过它来记录系统级事件、个别用户的行为以及对数据库对象的访问。

本章内容已在如下环境上测试:

①操作系统:中标麒麟7;

②数据库版本:达梦8;

相关关键字:DM8、数据库审计、AUDIT_ENABLE

审计开关

ENABLE_AUDIT参数为达梦数据库审计开关,DM8该参数为READ ONLY只读类型,不能使用SP_SET_PARA_NAME函数修改此参数,可以通过SP_SET_ENABLE_AUDIT动态设置。语法如下:

VOID SP_SET_ENABLE_AUDIT (

      PARAM     INT

)

参数说明:

PARAM:有三种取值(普通版本缺省值为0)。可选的取值为:

0:关闭审计

1:打开普通审计

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

只有SYSAUDITOR数据库审计员才能设置数据库审计开关,打开数据库普通审计功能。命令参考如下。

    sp_set_enable_audit(1);

    可通过查询V$DM_INI动态视图获取ENABLE_AUDIT的当前值。

      select para_name, para_value, para_type
      from v$dm_ini
      where para_name = 'ENABLE_AUDIT';

      审计设置

      具有AUDIT DATABASE权限的审计员可以进行审计设置。DM允许三个级别审计设置,分别是系统级、语句级和对象级。

      审计级别

      说明

      系统级

      系统的启动与关闭,此级别的审计无需用户设置,只要审计开关打开就会自动生成对应审计记录

      语句级

      对特定类型数据库对象的特殊SQL或语句组的审计。如AUDIT TABLE 将审计CREATE TABLE、ALTER TABLE和DROP TABLE等语句

      对象级

      审计作用在特殊对象上的语句。如test表上的INSERT语句

      语句级审计

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

      设置语句级审计的系统过程如下:

      VOID SP_AUDIT_STMT (

            TYPE     VARCHAR(30),

            USERNAME    VARCHAR (128),

            WHENEVER    VARCHAR (20)

      )

      参数说明:

      TYPE:语句级审计选项,详情可参考《DM8安全管理》手册。

      USERNAME:用户名,NULL表示不限制

      WHENEVER:审计时机,可选的取值为:

                 ALL:所有的

                 SUCCESSFUL:操作成功时

                 FAIL:操作失败时

      例如,审计所有用户的DELETE TABLE动作。语句参考如下(使用SYSAUDITOR用户执行):

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

      设置审计后,使用SYSAUDITOR用户查询SYSAUDIT系统表可以查看相关审计设置信息,语句参考如下(SF_GET_AUDIT_TYPENAME用于获取审计类型,SF_GET_AUDIT_LEVELNAME用于获取审计级别,SF_GET_AUDIT_WHENEVERNAME用于获取审计时机。注意WHENEVER是关键字,查询时需要加双引号):

        select SF_GET_AUDIT_TYPENAME(TYPE) TYPENAME,
        SF_GET_AUDIT_LEVELNAME(LEVEL) LEVELNAME,
        SF_GET_AUDIT_WHENEVERNAME("WHENEVER") WHENEVERNAME,
              UID, TVPID, COLID
        from SYSAUDIT;

        假如我们删除DMHR.EMPLOYEE员工表信息两条(注意,使用SYSDBA操作,SYSAUDITOR没有删除该表的权限),执行动作参考如下:

        即使我们未提交数据,使用SYSAUDITOR用户查询V$AUDITRECORDS表,也可以查看到审计相关记录信息,语句参考如下:

          select t.SCHNAME, t.OBJNAME, t.OPERATION, t.SUCC_FLAG, t.SQL_TEXT,
          to_char(t.optime, 'yyyy-mm-dd hh24:mi:ss') optime
          from v$auditrecords t;

          结果展示如下:

          使用SP_NOAUDIT_STMT过程可以取消语句级审计,参数与SP_AUDIT_STMT参数相同。取消审计所有用户的DELETE TABLE动作语句参考如下。

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

            对象级审计

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

            设置对象级审计的系统过程如下:

            VOID SP_AUDIT_OBJECT (

                  TYPE    VARCHAR(30),

                  USERNAME    VARCHAR (128),

                  SCHNAME    VARCHAR (128),

                  TVNAME    VARCHAR (128),

                  WHENEVER    VARCHAR (20)

            )

            VOID SP_AUDIT_OBJECT (

                  TYPE     VARCHAR(30),

                  USERNAME    VARCHAR (128),

                  SCHNAME    VARCHAR (128),

                  TVNAME    VARCHAR (128),

                  COLNAME      VARCHAR (128),

                  WHENEVER    VARCHAR (20)

            )

            参数说明:

            TYPE:对象级审计选项,详情可参考《DM8安全管理》手册。

            USERNAME:用户名

            SCHNAME模式名,为空时置‘null’

            TVNAME表、视图、存储过程名不能为空

            COLNAME列名

            WHENEVER审计时机,可选的取值为:

                      ALL:所有的

                      SUCCESSFUL:操作成功时

                      FAIL:操作失败时

            假如对表DMHR.DEPARTMENT修改的操作进行审计,语句参考如下:

              SP_AUDIT_OBJECT('UPDATE', 'SYSDBA', 'DMHR', 'DEPARTMENT', 'ALL');

              假如对表DMHR.EMPLOYEE的SALAERY列的修改成功操作进行审计,语句参考如下:

                SP_AUDIT_OBJECT('UPDATE','SYSDBA','DMHR','EMPLOYEE','SALARY','SUCCESSFUL');

                设置成功后,查询SYSAUDIT表可以看到新增的对象级审计信息,结果参考如下:

                使用SYSDBA查询SYSOBJECTS表中的信息,可以查看对应的用户及对象信息。

                使用SYSDBA用户更改DMHR.EMPLOYEE表的SALARY字段,及更改DEPARTMENT表数据信息,语句参考如下:

                更改完成后,使用SYSAUDITOR用户查询V$AUDITRECORDS表可以看到相关审计记录:

                使用SP_NOAUDIT_OBJECT过程可以取消对象级审计,参数与SP_AUDIT_OBJECT参数相同。取消上述对象级审计语句参考如下:

                  SP_NOAUDIT_OBJECT('UPDATE','SYSDBA', 'DMHR', 'EMPLOYEE', 'SALARY', 'SUCCESSFUL');
                  SP_NOAUDIT_OBJECT('UPDATE','SYSDBA', 'DMHR', 'DEPARTMENT', 'ALL');

                  审计文件

                  审计信息存储在审计文件中。审计文件存放在数据库的SYSTEM_PATH参数指定的路径,即数据库所在路径。审计文件命名格式为“AUDIT_实例名_GUID_创建时间.log”,其中“GUID”为DM给定的一个唯一值。审计文件的大小可以通过DM的INI参数AUDIT_MAX_FILE_SIZE指定,也可以使用系统过程SP_DROP_AUDIT_FILE删除某个时间点之前的历史审计信息。

                  好,以上是本次分享内容,最后做一下总结说明:

                  1.DM数据库审计开关需要使用SYSAUDITOR用户开启和关闭。相关审计设置和查询也需要使用SYSAUDITOR用户,SYSDBA用户无权开启和设置审计相关信息。

                  2.数据库审计员无法进行数据库增删改查等DML操作和DDL操作,相关DML和DDL操作需使用数据库管理员SYSDBA或其他有权限的普通管理用户操作。

                  3.SF_GET_AUDIT_TYPENAME、SF_GET_AUDIT_LEVELNAME、SF_GET_AUDIT_WHENEVERNAME三个函数是DM8新增的系统函数,分别用于获取审计类型、审计级别和审计时机,只有新版本才支持。

                  本次分享结束,感谢大家。

                  往期干货精选

                  干货分享丨DM8用户管理

                  干货分享丨DM归档的修复及应用场景

                  干货分享丨DM8 DTS工具使用小技巧

                  干货分享丨DM伪列的使用

                  文章转载自达梦大数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                  评论