oracle审计详解.docx
- 文档编号:9886253
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:24
- 大小:24.59KB
oracle审计详解.docx
《oracle审计详解.docx》由会员分享,可在线阅读,更多相关《oracle审计详解.docx(24页珍藏版)》请在冰豆网上搜索。
oracle审计详解
oracle审计详解
Sql>altersystemsetaudit_trail=DB,EXTENDEDscope=spfile;
**/9i:
"TRUE"/10.1g:
"DB_EXTENDED"/10.2g:
”DB,EXTENDED”/**
Sql>altersystemsetaudit_sys_operations=TRUEscope=spfile;
Sql>shutdownimmediate
Sql>startup
Oracle使用大量不同的审计方法来监控使用何种权限,以及访问哪些对象。
审计不会防止使用这些权限,但可以提供有用的信息,用于揭示权限的滥用和误用。
下表中总结了Oracle数据库中不同类型的审计。
审计类型
说明
语句审计
按照语句类型审计SQL语句,而不论访问何种特定的模式对象。
也可以在数据库中指定一个或多个用户,针对特定的语句审计这些用户
权限审计
审计系统权限,例如CREATETABLE或ALTERINDEX。
和语句审计一样,权限审计可以指定一个或多个特定的用户作为审计的目标
模式对象审计
审计特定模式对象上运行的特定语句(例如,DEPARTMENTS表上的UPDATE语句)。
模式对象审计总是应用于数据库中的所有用户
细粒度的审计
根据访问对象的内容来审计表访问和权限。
使用程序包DBMS_FGA来建立特定表上的策略
下面几节介绍DBA如何管理系统和对象权限使用的审计。
当需要一定的粒度时,DBA可以使用细粒度的审计来监控对表中某些行或列的访问,而不仅仅是是否访问表。
和审计相关的主要参数
SQL>showparameteraudit
audit_file_dest
audit_sys_operations
audit_trail
audit_sys_operations:
默认为false,当设置为true时,所有sys用户(包括以sysdba,sysoper身份登录的用户)的操作都会被记录,audittrail不会写在aud$表中,这个很好理解,如果数据库还未启动aud$不可用,那么像conn/assysdba这样的连接信息,只能记录在其它地方。
如果是windows平台,audtitrail会记录在windows的事件管理中,如果是linux/unix平台则会记录在audit_file_dest参数指定的文件中。
audit_trail:
None:
是默认值,不做审计;
DB:
将audittrail记录在数据库的审计相关表中,如aud$,审计的结果只有连接信息;
DB,Extended:
这样审计结果里面除了连接信息还包含了当时执行的具体语句;
OS:
将audittrail记录在操作系统文件中,文件名由audit_file_dest参数指定;
XML:
10g里新增的。
10gValues:
none
Disablesdatabaseauditing.
os
Enablesdatabaseauditinganddirectsallauditrecordstotheoperatingsystem'saudittrail.
db
Enablesdatabaseauditinganddirectsallauditrecordstothedatabaseaudittrail(theSYS.AUD$table).
db,extended
Enablesdatabaseauditinganddirectsallauditrecordstothedatabaseaudittrail(theSYS.AUD$table).Inaddition,populatestheSQLBINDandSQLTEXTCLOBcolumnsoftheSYS.AUD$table.
xml
EnablesdatabaseauditingandwritesallauditrecordstoXMLformatOSfiles.
xml,extended
Enablesdatabaseauditingandprintsallcolumnsoftheaudittrail,includingSqlTextandSqlBindvalues.
注:
参数AUDIT_TRAIL不是动态的,为了使AUDIT_TRAIL参数中的改动生效,必须关闭数据库并重新启动。
在对SYS.AUD$表进行审计时,应该注意监控该表的大小,以避免影响SYS表空间中其他对象的空间需求。
推荐周期性归档SYS.AUD$中的行,并且截取该表。
Oracle提供了角色DELETE_CATALOG_ROLE,和批处理作业中的特殊账户一起使用,用于归档和截取审计表。
audit_file_dest:
Audit_trail=OS时文件位置
1.语句审计
所有类型的审计都使用audit命令来打开审计,使用noaudit命令来关闭审计。
对于语句审计,audit命令的格式看起来如下所示:
AUDITsql_statement_clauseBY{SESSION|ACCESS}WHENEVER[NOT]SUCCESSFUL;
sql_statement_clause包含很多条不同的信息,例如希望审计的SQL语句类型以及审计什么人。
此外,希望在每次动作发生时都对其进行审计(byaccess)或者只审计一次(bysession)。
默认是bysession。
有时希望审计成功的动作:
没有生成错误消息的语句。
对于这些语句,添加wheneversuccessful。
而有时只关心使用审计语句的命令是否失败,失败原因是权限违犯、用完表空间中的空间还是语法错误。
对于这些情况,使用whenevernotsuccessful。
对于大多数类别的审计方法,如果确实希望审计所有类型的表访问或某个用户的任何权限,则可以指定all而不是单个的语句类型或对象。
表1列出了可以审计的语句类型,并且在每个类别中包含了相关语句的简要描述。
如果指定all,则审计该列表中的任何语句。
然而,表2中的语句类型在启用审计时不属于all类别;必须在audit命令中显式地指定它们。
表1包括在ALL类别中的可审计语句
语句选项
SQL操作
ALTERSYSTEM
所有ALTERSYSTEM选项,例如,动态改变实例参数,切换到下一个日志文件组,以及终止用户会话
CLUSTER
CREATE、ALTER、DROP或TRUNCATE集群
CONTEXT
CREATECONTEXT或DROPCONTEXT
DATABASELINK
CREATE或DROP数据库链接
DIMENSION
CREATE、ALTER或DROP维数
DIRECTORY
CREATE或DROP目录
INDEX
CREATE、ALTER或DROP索引
MATERIALIZEDVIEW
CREATE、ALTER或DROP物化视图
NOTEXISTS
由于不存在的引用对象而造成的SQL语句的失败
PROCEDURE
CREATE或DROPFUNCTION、LIBRARY、PACKAGE、PACKAGEBODY或PROCEDURE
PROFILE
CREATE、ALTER或DROP配置文件
PUBLICDATABASELINK
CREATE或DROP公有数据库链接
PUBLICSYNONYM
CREATE或DROP公有同义词
ROLE
CREATE、ALTER、DROP或SET角色
ROLLBACKSEGMENT
CREATE、ALTER或DROP回滚段
SEQUENCE
CREATE或DROP序列
SESSION
登录和退出
SYNONYM
CREATE或DROP同义词
SYSTEMAUDIT
系统权限的AUDIT或NOAUDIT
SYSTEMGRANT
GRANT或REVOKE系统权限和角色
TABLE
CREATE、DROP或TRUNCATE表
TABLESPACE
CREATE、ALTER或DROP表空间
TRIGGER
CREATE、ALTER(启用/禁用)、DROP触发器;具有ENABLEALLTRIGGERS或DISABLEALLTRIGGERS的ALTERTABLE
TYPE
CREATE、ALTER和DROP类型以及类型主体
USER
CREATE、ALTER或DROP用户
VIEW
CREATE或DROP视图
表2显式指定的语句类型
语句选项
SQL操作
ALTERSEQUENCE
任何ALTERSEQUENCE命令
ALTERTABLE
任何ALTERTABLE命令
COMMENTTABLE
添加注释到表、视图、物化视图或它们中的任何列
DELETETABLE
删除表或视图中的行
EXECUTEPROCEDURE
执行程序包中的过程、函数或任何变量或游标
GRANTDIRECTORY
GRANT或REVOKEDIRECTORY对象上的权限
GRANTPROCEDURE
GRANT或REVOKE过程、函数或程序包上的权限
GRANTSEQUENCE
GRANT或REVOKE序列上的权限
GRANTTABLE
GRANT或REVOKE表、视图或物化视图上的权限
GRANTTYPE
GRANT或REVOKETYPE上的权限
INSERTTABLE
INSERTINTO表或视图
LOCKTABLE
表或视图上的LOCKTABLE命令
SELECTSEQUENCE
引用序列的CURRVAL或NEXTVAL的任何命令
SELECTTABLE
SELECTFROM表、视图或物化视图
UPDATETABLE
在表或视图上执行UPDATE
一些示例可以帮助读者更清楚地了解所有这些选项。
在示例数据库中,用户KSHELTON具有HR模式和其他模式中所有表上的权限。
允许KSHELTON创建其中一些表上的索引,但如果有一些与执行计划改动相关的性能问题,则需要知道何时创建这些索引。
可以使用如下命令审计KSHELTON创建的索引:
SQL>auditindexbykshelton;Auditsucceeded.
后面的某一天,KSHELTON在HR.JOBS表上创建了一个索引:
SQL>createindexjob_title_idxonhr.jobs(job_title);Indexcreated.
检查数据字典视图DBA_AUDIT_TRAIL中的审计跟踪,可以看到KSHELTON实际上在8月12日的5:
15P.M.创建了索引:
SQL>selectusername,to_char(timestamp,'MM/DD/YYHH24:
MI')Timestamp,2obj_name,action_name,sql_textfromdba_audit_trail3whereusername='KSHELTON';
USERNAMETIMESTAMPOBJ_NAMEACTION_NAMESQL_TEXT-------------------------------------------------------------------KSHELTON08/12/0717:
15JOB_TITLE_IDXCREATEINDEXcreateindexhr.job_title_idxonhr.jobs(job_title)
1rowselected.
注意:
从OracleDatabase11g开始,只有在初始参数AUDIT_TRAIL被设置为DB_EXTENDED时,才填充DBA_AUDIT_TRAIL中的列SQL_TEXT和SQL_BIND。
默认情况下,AUDIT_TRAIL的值是DB。
为了关闭HR.JOBS表上KSHELTON的审计,可以使用noaudit命令,如下所示:
SQL>noauditindexbykshelton;Noauditsucceeded.
也可能希望按常规方式审计成功的和不成功的登录,这需要两个audit命令:
SQL>auditsessionwheneversuccessful;Auditsucceeded.SQL>auditsessionwhenevernotsuccessful;Auditsucceeded.
2.权限审计
审计系统权限具有与语句审计相同的基本语法,但审计系统权限是在sql_statement_clause中,而不是在语句中,指定系统权限。
例如,可能希望将ALTERTABLESPACE权限授予所有的DBA,但希望在发生这种情况时生成审计记录。
启用对这种权限的审计的命令看起来类似于语句审计:
SQL>auditaltertablespacebyaccesswheneversuccessful;Auditsucceeded.
每次成功使用ALTERTABLESPACE权限时,都会将一行内容添加到SYS.AUD$。
使用SYSDBA和SYSOPER权限或者以SYS用户连接到数据库的系统管理员可以利用特殊的审计。
为了启用这种额外的审计级别,可以设置初始参数AUDIT_SYS_OPERATIONS为TRUE。
这种审计记录发送到与操作系统审计记录相同的位置。
因此,这个位置是和操作系统相关的。
当使用其中一种权限时执行的所有SQL语句,以及作为用户SYS执行的任何SQL语句,都会发送到操作系统审计位置。
模式对象审计
审计对各种模式对象的访问看起来类似于语句审计和权限审计:
AUDITschema_object_clauseBY{SESSION|ACCESS}WHENEVER[NOT]SUCCESSFUL;
schema_object_clause指定对象访问的类型以及访问的对象。
可以审计特定对象上14种不同的操作类型,下表中列出了这些操作。
对象选项
说明
ALTER
改变表、序列或物化视图
AUDIT
审计任何对象上的命令
COMMENT
添加注释到表、视图或物化视图
DELETE
从表、视图或物化视图中删除行
EXECUTE
执行过程、函数或程序包
FLASHBACK
执行表或视图上的闪回操作
GRANT
授予任何类型对象上的权限
INDEX
创建表或物化视图上的索引
INSERT
将行插入表、视图或物化视图中
LOCK
锁定表、视图或物化视图
READ
对DIRECTORY对象的内容执行读操作
RENAME
重命名表、视图或过程
SELECT
从表、视图、序列或物化视图中选择行
UPDATE
更新表、视图或物化视图
如果希望审计HR.JOBS表上的所有insert和update命令,而不管谁正在进行更新,则每次该动作发生时,都可以使用如下所示的audit命令:
SQL>auditinsert,updateonhr.jobsbyaccesswheneversuccessful;Auditsuccessful.
用户KSHELTON决定向HR.JOBS表添加两个新行:
SQL>insertintohr.jobs(job_id,job_title,min_salary,max_salary)2values('IN_CFO','InternetChiefFunOfficer',7500,50000);1rowcreated.
SQL>insertintohr.jobs(job_id,job_title,min_salary,max_salary)2values('OE_VLD','OrderEntryCCValidation',5500,20000);1rowcreated.
查看DBA_AUDIT_TRAIL视图,可以看到KSHELTON会话中的两个insert命令:
USERNAMETIMESTAMPOWNEROBJ_NAMEACTION_NAMESQL_TEXT------------------------------------------------------------------------------------------------------------------------KSHELTON08/12/0722:
54HRJOBSINSERTinsertintohr.jobs(job_id,job_title,min_salary,max_salary)values('IN_CFO','InternetChiefFunOfficer',7500,50000);KSHELTON08/12/0722:
53HRJOBSINSERTinsertintohr.jobs(job_id,job_title,min_salary,max_salary)values('OE_VLD','OrderEntryCCValidation',5500,20000);KSHELTON08/12/0722:
51LOGON
3rowsselected.
4.细粒度的审计
从Oracle9i开始,通过引入细粒度的对象审计,或称为FGA,审计变得更为关注某个方面,并且更为精确。
由称为DBMS_FGA的PL/SQL程序包实现FGA。
使用标准的审计,可以轻松发现访问了哪些对象以及由谁访问,但无法知道访问了哪些行或列。
细粒度的审计可解决这个问题,它不仅为需要访问的行指定谓词(或where子句),还指定了表中访问的列。
通过只在访问某些行和列时审计对表的访问,可以极大地减少审计表条目的数量。
程序包DBMS_FGA具有4个过程:
ADD_POLICY
添加使用谓词和审计列的审计策略
DROP_POLICY
删除审计策略
DISABLE_POLICY
禁用审计策略,但保留与表或视图关联的策略
ENABLE_POLICY
启用策略
用户TAMARA通常每天访问HR.EMPLOYEES表,查找雇员的电子邮件地址。
系统管理员怀疑TAMARA正在查看经理们的薪水信息,因此他们建立一个FGA策略,用于审计任何经理对SALARY列的任何访问:
begindbms_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;
可以使用数据字典视图DBA_FGA_AUDIT_TRAIL访问细粒度审计的审计记录。
如果一般需要查看标准的审计行和细粒度的审计行,则数据字典视图DBA_COMMON_AUDIT_TRAIL结合了这两种审计类型中的行。
继续看示例,用户TAMARA运行了如下两个SQL查询:
SQL>selectemployee_id,first_name,last_name,emailfromhr.employees2whereemployee_id=114;
EMPLOYEE_IDFIRST_NAMELAST_NAMEEMAIL----------------------------------------------------------------114DenRaphaelyDRAPHEAL
1rowselected.
SQL>selectemployee_id,first_name,last_name,salaryfromhr.employees2whereemployee_id=114;
EMPLOYEE_IDFIRST_NAMELAST_NAMESALARY--------------------------------------------------------------114DenRaphaely11000
1rowselected.
第一个查询访问经理信息,但没有访问SALARY列。
第二个查询与第一个查询相同,但是访问了SALARY列,因此触发了FGA策略,从而在审计跟踪中生成了一行:
SQL>selectto_char(timestamp,'mm/dd/yyhh24:
mi')timestamp,2object_schema,object_name,policy_name,statement_type3fromdba_fga_audit_trail4wheredb_user='TAMARA';
TIMESTAMPOBJECT_SCHEMAOBJECT_NAMEPOLICY_NAMESTATEMENT_TYPE----------------------------------------------------------------------08/12/0718:
07HREMPLOYEESSAL_SELECT_AUDITSELECT
1rowselected.
因为在本章前面的VPD示例中建立了细粒度的访问控制来阻止对SALARY列的未授权访问,因此需要加倍检查策略函数,确保仍然正确限制了SALARY信息。
细粒度的审计以及标准审计是确保首先正确建立授权策略的好方法。
5.与审计相关的数据字典视图
下表包含了与审计相关的数据字典视图。
数据字典视图
说明
AUDIT_ACTIONS
包含审计跟踪动作类型代码的描述,例如INSERT、DROPVIEW、DELETE、LOGON和LOCK
DBA_AUDIT_OBJECT
与数据库中对象相关的审计跟踪记录
DBA_AUDIT_POLICIES
数据库中的细粒度审计策略
DBA_AUDIT_SESSION
与CONNECT和DISCONNECT相关的所有审计跟踪记录
DBA_AUDIT_STATEMENT
与GRANT、REVOKE、AUDIT、NOAUDIT和ALTERSYSTEM命令相关的审
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 审计 详解