收藏 分销(赏)

数据库审计全.doc

上传人:a199****6536 文档编号:2246091 上传时间:2024-05-23 格式:DOC 页数:12 大小:28.21KB 下载积分:8 金币
下载 相关 举报
数据库审计全.doc_第1页
第1页 / 共12页
数据库审计全.doc_第2页
第2页 / 共12页


点击查看更多>>
资源描述
数据库审计 查看数据库审计是否打开 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 <new tablespace>; sql>alter index I_aud1 rebuild online tablespace <new tablespace>; SQL> alter table audit$ move tablespace <new tablespace>; SQL> alter index i_audit rebuild online tablespace <new tablespace>; SQL> alter table audit_actions move tablespace <new tablespace>; SQL> alter index i_audit_actions rebuild online tablespace <new 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    -- 标准审计+精细审计
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 数据库/数据算法

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服