最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

(完整版)数据库审计全

来源:动视网 责编:小OO 时间:2025-09-30 08:22:02
文档

(完整版)数据库审计全

数据库审计查看数据库审计是否打开SQL>showparameteraudit;NAMETYPEVALUE-----------------------------------------------------------------------------audit_file_deststring/oracle/app/oracle/admin/PTBCS/adumpaudit_sys_operationsbooleanFALSEaudit_syslog_levelstringaudit_t
推荐度:
导读数据库审计查看数据库审计是否打开SQL>showparameteraudit;NAMETYPEVALUE-----------------------------------------------------------------------------audit_file_deststring/oracle/app/oracle/admin/PTBCS/adumpaudit_sys_operationsbooleanFALSEaudit_syslog_levelstringaudit_t
数据库审计

查看数据库审计是否打开

SQL> show parameter audit;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

audit_file_dest                      string      /oracle/app/oracle/admin/PTBCS/adump

audit_sys_operations                 boolean     FALSE

audit_syslog_level                   string      

audit_trail                          string      DB_EXTENDED

audit_sys_operations:默认为false,当设置为true时,所有sys(包括以sysdba,sysopr身份登录的用户)操作都会被记录,但记录不会被写在aud$表中。如果为windows平台,会记录在windows事件管理当中。

audit_trail:

none为默认值,11G之后默认值为‘db’,如果默认值为none,那么不做审计

DB:将audit trail 记录在数据库审计相关的表中,审计只有连接信息

DB_EXTENDED:这样审计还包含当时的执行的具体语句

OS:将audit trail记录在系统文件中,文件名有audit_file_dest参数指定

修改语句为SQL> alter system set audit_trail='db_extended' scope=spfile;

注:参数audit_trail不是动态,为了使此参数中的改动生效,必须关闭数据库并重新启动。在对sys.aud$进行审计时,还需要监控该表的大小,以免影响system表空间中其他对象的空间需求。

推荐周期性归档sys.aud$中的行,并截取该表。

目前采用计划任务,每日删除上月数据,只保留当月数据。

Audit_file_dest:audit_trail=os时,文件位置。

语句审计

SQL> audit on table by access;

每次动作发生时都对其进行审计

SQL> audit on table by session;

只审计一次,默认为by session

有时希望审计成功的动作:没有生成错误消息的语句。对于这些语句,添加whenever successful。而有时只关心使用审计语句的命令是否失败,失败原因是权限违犯、用完表空间中的空间还是语法错误。对于这些情况,使用 whenever not successful。

对于大多数类别的审计方法,如果确实希望审计所有类型的表访问或某个用户的任何权限,则可以指定all而不是单个的语句类型或对象。

SQL> audit alter system ;

所有ALTER SYSTEM选项,例如,动态改变实例参数,切换到下一个日志文件组,以及终止用户会话

SQL> audit cluster;

CREATE、ALTER、DROP或TRUNCATE集群

SQL> audit context;

CREATE CONTEXT或DROP CONTEXT;

SQL> audit database link;

CREATE或DROP数据库链接;

SQL> audit dimension;

CREATE、ALTER或DROP维数

SQL> audit directory;

CREATE或DROP目录;

SQL> audit index;

CREATE、ALTER或DROP索引

SQL> audit materialized view;

CREATE、ALTER或DROP物化视图

SQL> audit not exists;

由于不存在的引用对象而造成的SQL语句的失败;

SQL> audit procedure;

CREATE或DROP FUNCTION、LIBRARY、PACKAGE、PACKAGE BODY或PROCEDURE

SQL> audit profile;

CREATE、ALTER或DROP配置文件

SQL> audit public database link;

CREATE或DROP公有数据库链接

SQL> audit public synonym;

CREATE或DROP公有同义词

SQL> audit role;

CREATE、ALTER、DROP或SET角色

SQL> audit rollback segment;

CREATE、ALTER或DROP回滚段

SQL> audit sequence;

CREATE或DROP序列

SQL> audit session;

登录和退出

SQL> audit system audit;

系统权限的AUDIT或NOAUDIT

SQL> audit system grant;

GRANT或REVOKE系统权限和角色

SQL> audit table;

CREATE、DROP或TRUNCATE表

SQL> audit tablespace;

CREATE、ALTER或DROP表空间

SQL> audit trigger;

CREATE、ALTER(启用/禁用)、DROP触发器;具有ENABLE ALL TRIGGERS或DISABLE ALL TRIGGERS的ALTER TABLE

SQL> audit type;

CREATE、ALTER和DROP类型以及类型主体

SQL> audit user;

CREATE、ALTER或DROP用户

SQL> audit view;

CREATE或DROP视图

显式指定的语句类型

SQL> audit alter sequence;

任何ALTER SEQUENCE命令

SQL> audit alter table;

任何ALTER TABLE命令

SQL> audit comment table;

添加注释到表、视图、物化视图或它们中的任何列

SQL> audit delete table;

删除表或视图中的行

SQL> audit execute procedure;

执行程序包中的过程、函数或任何变量或游标

SQL> audit grant directory;

GRANT或REVOKE DIRECTORY对象上的权限

SQL> audit grant procedure;

GRANT或REVOKE过程、函数或程序包上的权限

SQL> audit grant sequence;

GRANT或REVOKE序列上的权限

SQL> audit grant table;

GRANT或REVOKE表、视图或物化视图上的权限

SQL> audit grant type;

GRANT或REVOKE TYPE上的权限

SQL> audit insert table;

INSERT INTO表或视图

SQL> audit lock table;

表或视图上的LOCK TABLE命令

SQL> audit select sequence;

引用序列的CURRVAL或NEXTVAL的任何命令

SQL> audit select table;

SELECT FROM表、视图或物化视图

SQL> audit update table;

在表或视图上执行UPDATE

SQL> select username,to_char(timestamp,'MM/DD/YY HH24:MI') timestamp

  2  OBJ_NAME,ACTION_NAME,SQL_TEXT FROM DBA_AUDIT_TRAIL

  3  WHERE USERNAME = 'SCOTT';

我用的基本查询审计信息,显示结果如下

scott    08/12/07 17:15  JOB_TITLE_IDX   CREATE INDEX     create index hr.

job_title_idx on

hr.jobs(job_title)

1 row selected.

权限审计

审计系统权限具有与语句审计相同的基本语法,但审计系统权限是在sql_statement_clause中,而不是在语句中,指定系统权限。

SQL> audit alter tablespace by access whenever successful;

使用SYSDBA和SYSOPER权限或者以SYS用户连接到数据库的系统管理员可以利用特殊的审计。为了启用这种额外的审计级别,可以设置初始参数AUDIT_SYS_OPERATIONS为TRUE。这种审计记录发送到与操作系统审计记录相同的位置。因此,这个位置是和操作系统相关的。当使用其中一种权限时执行的所有SQL语句,以及作为用户SYS执行的任何SQL语句,都会发送到操作系统审计位置。

模式对象审计

SQL> audit alter on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;

改变表、序列或物化视图

SQL> audit AUDIT on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;

审计任何对象上的命令

SQL> audit COMMENT on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;

添加注释到表、视图或物化视图

SQL> audit DELETE on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;

从表、视图或物化视图中删除行

SQL> audit EXECUTE on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;

执行过程、函数或程序包

SQL> audit FLASHBACK on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;

执行表或视图上的闪回操作

SQL> audit GRANT on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;

授予任何类型对象上的权限

SQL> audit INDEX on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;

创建表或物化视图上的索引

SQL> audit INSERT on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;

将行插入表、视图或物化视图中

SQL> audit LOCK on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;

锁定表、视图或物化视图

SQL> audit READ on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;

对DIRECTORY对象的内容执行读操作

SQL> audit RENAME on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;

重命名表、视图或过程

SQL> audit SELECT on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;

从表、视图、序列或物化视图中选择行

SQL> audit UPDATE on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;

更新表、视图或物化视图

细粒度审计

称为FGA,审计变得更为关注某个方面,并且更为精确。由称为DBMS_FGA的PL/SQL程序包实现FGA。

使用标准的审计,可以轻松发现访问了哪些对象以及由谁访问,但无法知道访问了哪些行或列。细粒度的审计可解决这个问题,它不仅为需要访问的行指定谓词(或where子句),还指定了表中访问的列。通过只在访问某些行和列时审计对表的访问,可以极大地减少审计表条目的数量。

例如:用户TAMARA通常每天访问HR.EMPLOYEES表,查找雇员的电子邮件地址。系统管理员怀疑TAMARA正在查看经理们的薪水信息,因此他们建立一个FGA策略,用于审计任何经理对SALARY列的任何访问:

begin

dbms_fga.add_policy(

object_schema =>   'HR',

object_name =>     'EMPLOYEES',

policy_name =>     'SAL_SELECT_AUDIT',

audit_condition => 'instr(job_id,''_MAN'') > 0',

audit_column =>    'SALARY'

);

end;

ADD_POLICY                添加使用谓词和审计列的审计策略

DROP_POLICY                删除审计策略

DISABLE_POLICY            禁用审计策略,但保留与表或视图关联的策略

ENABLE_POLICY            启用策略

与审计相关的数据字典视图

数据字典视图说    明
AUDIT_ACTIONS包含审计跟踪动作类型代码的描述,例如INSERT、DROP VIEW、DELETE、LOGON和LOCK
DBA_AUDIT_OBJECT与数据库中对象相关的审计跟踪记录
DBA_AUDIT_POLICIES数据库中的细粒度审计策略
DBA_AUDIT_SESSION与CONNECT和DISCONNECT相关的所有审计跟踪记录
DBA_AUDIT_STATEMENT与GRANT、REVOKE、AUDIT、NOAUDIT和ALTER SYSTEM命令相关的审计跟踪条目
DBA_AUDIT_TRAIL包含标准审计跟踪条目。USER_AUDIT_TRAILUSER_TRAIL_AUDIT只包含已连接用户的审计行
DBA_FGA_AUDIT_TRAIL细粒度审计策略的审计跟踪条目
数据字典视图说    明
DBA_COMMON_AUDIT_TRAIL将标准的审计行和细粒度的审计行结合在一个视图中
DBA_OBJ_AUDIT_OPTS对数据库对象生效的审计选项
DBA_PRIV_AUDIT_OPTS对系统权限生效的审计选项
DBA_STMT_AUDIT_OPTS对语句生效的审计选项
保护审计跟踪

审计跟踪自身需要受到保护,特别是在非系统用户必须访问表SYS.AUD$时。内置的角色DELETE_ANY_CATALOG是非SYS用户可以访问审计跟踪的一种方法(例如,归档和截取审计跟踪,以确保它不会影响到SYS表空间中其他对象的空间需求)。

为了建立对审计跟踪自身的审计,以SYSDBA身份连接到数据库,并运行下面的命令:

SQL> audit all on sys.aud$ by access;

现在,所有针对表SYS.AUD$的动作,包括select、insert、update和delete,都记录在SYS.AUD$自身中。但是,您可能会问,如果某个人删除了标识对表SYS.AUD$访问的审计记录,这时会发生什么?此时将删除表中的行,但接着插入另一行,记录行的删除。因此,总是存在一些针对SYS.AUD$表的(有意的或偶然的)活动的证据。此外,如果将AUDIT_SYS _OPERATIONS设置为True,使用as sysdba、as sysoper或以SYS自身连接的任何会话将记录到操作系统审计位置中,甚至Oracle DBA可能都无法访问该位置。因此,有许多合适的安全措施,用于确保记录数据库中所有权限的活动,以及隐藏该活动的任何尝试。

将审计相关的表更换表空间 

由于AUD$表等审计相关的表存放在SYSTEM表空间,因此为了不影响系统的性能,保护SYSTEM表空间,最好把AUD$移动到其他的表空间上。可以使用下面的语句来进行移动:

 

sql>connect / as sysdba;

sql>alter table aud$ move tablespace ;

sql>alter index I_aud1 rebuild online tablespace ;

SQL> alter table audit$ move tablespace ;

SQL> alter index i_audit rebuild online tablespace ;

SQL> alter table audit_actions move tablespace ;

SQL> alter index i_audit_actions rebuild online tablespace ;

SQL> conn /as sysdba

SQL> show parameter audit

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

audit_file_dest                      string      /u01/app/oracle/admin/ORCL/adump

audit_sys_operations                 boolean     FALSE

audit_syslog_level                   string

SQL> alter system set audit_sys_operations=TRUE scope=spfile;    --审计管理用户(以sysdba/sysoper角色登陆)

SQL> alter system set audit_trail=db,extended scope=spfile;

SQL> startup force;

SQL> show parameter audit

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

audit_file_dest                      string      /u01/app/oracle/admin/ORCL/adump

audit_sys_operations                 boolean     TRUE

audit_syslog_level                   string

audit_trail                          string      DB, EXTENDED          

如果在命令后面添加by user则只对user的操作进行审计,如果省去by用户,则对系统中所有的用户进行审计(不包含sys用户).

例:

AUDIT DELETE ANY TABLE;    --审计删除表的操作

AUDIT DELETE ANY TABLE WHENEVER NOT SUCCESSFUL;    --只审计删除失败的情况

AUDIT DELETE ANY TABLE WHENEVER SUCCESSFUL;    --只审计删除成功的情况

AUDIT DELETE,UPDATE,INSERT ON user.table by test;    --审计test用户对表user.table的delete,update,insert操作

撤销审计

SQL> noaudit all on t_test;

将审计结果表从system表空间里移动到别的表空间上

实际上sys.aud$表上包含了两个lob字段,并不是简单的move table就可以。

下面是具体的过程:

alter table sys.aud$ move tablespace users;

alter table sys.aud$ move lob(sqlbind) store as( tablespace USERS);

alter table sys.aud$ move lob(SQLTEXT) store as( tablespace USERS);

alter index sys.I_AUD1 rebuild tablespace users;

应用

语句审计

多层环境下的审计:appserve-应用服务器,jackson-client

AUDIT SELECT TABLE BY appserve ON BEHALF OF jackson;

审计连接或断开连接:

AUDIT SESSION;

AUDIT SESSION BY jeff, lori;    -- 指定用户

审计权限(使用该权限才能执行的操作):

AUDIT DELETE ANY TABLE BY ACCESS WHENEVER NOT SUCCESSFUL;

AUDIT DELETE ANY TABLE;

AUDIT SELECT TABLE, INSERT TABLE, DELETE TABLE, EXECUTE PROCEDURE BY ACCESS WHENEVER NOT SUCCESSFUL;

对象审计:

AUDIT DELETE ON jeff.emp;

AUDIT SELECT, INSERT, DELETE ON jward.dept BY ACCESS WHENEVER SUCCESSFUL;

取消审计:

NOAUDIT session;

NOAUDIT session BY jeff, lori;

NOAUDIT DELETE ANY TABLE;

NOAUDIT SELECT TABLE, INSERT TABLE, DELETE TABLE,EXECUTE PROCEDURE;

NOAUDIT ALL;    -- 取消所有statement审计

NOAUDIT ALL PRIVILEGES;    -- 取消所有权限审计

NOAUDIT ALL ON DEFAULT;    -- 取消所有对象审计

清除审计信息

DELETE FROM SYS.AUD$;

DELETE FROM SYS.AUD$ WHERE obj$name='EMP';

审计相关视图

STMT_AUDIT_OPTION_MAP    -- 审计选项类型代码

AUDIT_ACTIONS    -- action代码

ALL_DEF_AUDIT_OPTS    -- 对象创建时默认的对象审计选项

DBA_STMT_AUDIT_OPTS    -- 当前数据库系统审计选项

DBA_PRIV_AUDIT_OPTS    -- 权限审计选项

DBA_OBJ_AUDIT_OPTS    

USER_OBJ_AUDIT_OPTS    -- 对象审计选项

DBA_AUDIT_TRAIL    

USER_AUDIT_TRAIL    -- 审计记录

DBA_AUDIT_OBJECT    

USER_AUDIT_OBJECT    -- 审计对象列表

DBA_AUDIT_SESSION    

USER_AUDIT_SESSION    -- session审计

DBA_AUDIT_STATEMENT    

USER_AUDIT_STATEMENT    -- 语句审计

DBA_AUDIT_EXISTS    -- 使用BY AUDIT NOT EXISTS选项的审计

DBA_AUDIT_POLICIES    -- 审计POLICIES

DBA_COMMON_AUDIT_TRAIL    -- 标准审计+精细审计

文档

(完整版)数据库审计全

数据库审计查看数据库审计是否打开SQL>showparameteraudit;NAMETYPEVALUE-----------------------------------------------------------------------------audit_file_deststring/oracle/app/oracle/admin/PTBCS/adumpaudit_sys_operationsbooleanFALSEaudit_syslog_levelstringaudit_t
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top