深入浅出Oracle数据库安全知识.ppt
《深入浅出Oracle数据库安全知识.ppt》由会员分享,可在线阅读,更多相关《深入浅出Oracle数据库安全知识.ppt(24页珍藏版)》请在装配图网上搜索。
,刘相兵(MacleanLiu)liu.maclean,深入浅出Oracle数据库安全知识(V1.0),介绍,允许或禁止OracleDB中的用户行为,包括其中的对象通过以下实现:登录身份验证(Authentication),连接到数据库访问控制,访问模式对象和数据(accesscontrol)审计,记录用户行为(audit),基础身份验证,数据库管理员(以SYSDBA/SYSOPER)身份在DB之外被身份验证操作系统身份验证密码文件身份验证举例来说sqlplus“/assysdba”登录,OS用户在Unix上为DBA组用户,在Windows上是ORADBA组用户普通数据库用户只能在数据库启动(alterdatabaseopen)后身份验证并等登录也可以采用OS身份验证例如:createusermacleanidentifiedexternally.,基础身份验证,数据库身份认证例如:createusermacleanidentifiedbyoracle;可以通过数据字典视图来查看用户信息DBA_USERSdescribesallusersofthedatabase.ALL_USERSListsusersvisibletothecurrentuser,butdoesnotdescribethemUSER_TS_QUOTASDescribestablespacequotasforusersV$SESSIONListssessioninformationforeachcurrentsession,includesusernamePROXY_USERSDescribesuserswhocanassumetheidentityofotherusersV$PWFILE_USERSlistsusersgrantedSYSDBAandSYSOPERprivilegesasderivedfromthepasswordfile,访问控制,对象级别的安全(最小权限原则)通过对象权限通过角色数据级别的安全(细粒度访问控制)-通过RLS(RowLevelSecurity),对象级别的安全控制,将自身拥有对象的权限显示地授权给其他用户,包括查询和修改数据举例来说:CONNMACLEAN/ORACLEGRANTSELECTONwallettohanna;角色(roles)是一组已被命名的权限,可以直接授权给用户或者其他角色:举例来说:CREATEROLEdeveloper;GRANTSELECTONwallet1todeveloper;GRANTINSERTONwallet1todeveloper;GRANTrole1tohanna;,对象级别的安全控制,内核函数Kzpchkbu()负责完成为给定用户检查某个对象上权限的任务。该函数可能被多种路径调用,以检查对象上的必要权限。大致的算法如下:If检查需要被授权的用户是否对象的拥有者则返回授权验证成功(表示不需要做权限检查)Else该对象权限是否被授予了PUBLIC若是,则返回授权验证成功Else检查该用户是否被显示地授予了该对象权限或角色若是,则返回授权验证成功Else检查该用户是否被显示地授予了对应的系统权限若是,则返回授权验证成功否则报错,ORA_01031,ORA-00942,对象级别的安全控制,普通用户访问SYSschema下的对象?(越来越困难!)从9i开始,ANY权限无法访问SYS用户对象默认O7_DICTIONARY_ACCESSIBILITY=false,设置为TRUE可以让ANY权限访问SYS对象否则普通用户必须显示地拥有SYS对象的权限。,对象级别的安全控制,常用数据字典视图,帮助了解对象和系统权限的信息:-DBA_SYS_PRIVSdescribessystemprivilegesgrantedtousersandroles(USER_SYS_PRIVSforconnecteduser).-SESSION_PRIVSliststheprivilegesthatarecurrentlyavailabletotheuser.-SESSION_ROLESliststherolesthatarecurrentlyenabledtotheuser.-DBA_TAB_PRIVSdescribesallobjectgrantsinthedatabase.(USER_TAB_PRIVSforconnecteduser).,数据级别的安全(RLS/VPD),VirtualPrivateDatabase(VPD)有时候也叫做FineGrainedAccessControl(FGAC),亦即RowLevelSecurity(RLS),在Oracle8i中被引入;由于该特性是基于实际的数据内容而非数据库对象,因此被叫做RLS。仅在discretionaryaccesscontrol(DAC)满足的情况下RLS生效,例如user1尝试访问user2所拥有的存在RLSpolicy的表,前提是在user2的表上有SELECT权限其内部工作原理是透明地将SQL语句修改成基于预定义准则的临时视图。在运行时,谓词会被附加到原查询上以便过滤查询所能看到的数据,数据级别的安全(RLS/VPD),通过Oracle提供的标准DBMS_RLSPackage的过程来将表/视图/同义词等对象和策略关联起来RLS策略包含一个PL/SQL函数以返回谓词串,这个谓词串会被在语句被执行前被加入到查询条件中例如::CONNECTscott/tigercreatetablet1(c1int);insertintot1values(10);insertintot1values(10);insertintot1values(20);insertintot1values(30);commit;,数据级别的安全(RLS/VPD),CREATEORREPLACEFUNCTIONfunc1(schema_nameVARCHAR2,table_nameVARCHAR2)RETURNVARCHAR2ISBEGINRETURNc1=10;END;/SQLEXECDBMS_RLS.ADD_POLICY(scott,t1,pol1,scott,func1);PL/SQLproceduresuccessfullycompleted.SQLselect*fromt1;C1-1010,数据级别的安全(RLS/VPD),内核函数kzrtevw()完成为存在RLSpolicy的表/视图/同义词创建临时视图的工作在语义解析阶段,从数据字典层kkmfcblo()调用kzrtevw()一个查询语句”select*frommaclean”在语义解析阶段被装换为Select*from(select*frommacleanwheret1=10);临时视图kzrtevw()生成的临时视图会再次被硬解析hardparse,数据级别的安全(RLS/VPD),若存在参考完整性约束例如一张启用了RLSPolicy的子表上有外键约束,RLS机制会检查相关的父表上是否有RLSPolicy以判断是否真的可以从父表上读取数据以验证约束。这通过内核函数kzrtppg()完成,若无法从父表读取到数据,则报错ORA-28117。oraclevrh8$oerrora2811728117,00000,integrityconstraintviolated-parentrecordnotfound/*Cause:trytoupdate/insertachildrecordwithnewforeignkey/values,butthecorrespondingparentrowisnotvisible/becauseoffine-grainedsecurityintheparent./*Action:makesurethattheupdatedforeignkeyvaluesmustalsovisibleintheparent,数据级别的安全(RLS/VPD),SYS对任何行级安全策略(RLS)均享有豁免权可以通过系统权限“EXEMPTACCESSPOLICY”让普通用户也对RLSPolicy豁免RLSpolicies相关的一些有用字典视图:ALL_POLICIESdescribesthesecuritypoliciesonthesynonyms,tables,andviewsaccessibletothecurrentuser.DBA_POLICIESdescribesallsecuritypoliciesinthedatabase.USER_POLICIESdescribesthesecuritypoliciesonthesynonyms,tables,andviewsownedbythecurrentuser.,Audit审计记录用户行为,在部署安全措施后仍有发生恶意数据库行为的可能性审计和记录用户行为可以发现各种可疑的或伪装的恶意行为有助于进一步加强安全措施,Audit审计记录用户行为,Audit审计的种类强制审计:为每一次实例启动写出审计记录到OS文件,shutdown以及权限登录的记录存放在$ORACLE_HOME/rdbms/audit目录下(注意定期清理哦,亲!)SYS审计:记录SYSDBA/SYSOPER等权限用户的操作,审计记录存放在OS文件,SYSLOG中。标准审计:记录用户针对数据库对象、语句、权限级别的行为。审计记录可以存放在OS文件、XML文件或数据库中(AUD$基表)对象级别审计权限级别审计语句级别审计细粒度控制:基于用户访问的数据记录用户行为。审计记录存放在数据库内(FGA_LOG$)或者XML文件中。,Audit审计记录用户行为,示例审计文件:Auditfile/s01/admin/G10R25/adump/g10r25_ora_3724_1.audOracleDatabase10gEnterpriseEditionRelease10.2.0.5.0-64bitProductionWiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptionsORACLE_HOME=/s01/oracle/product/10.2.0.5/db_1Systemname:LinuxNodename:Release:2.6.32-200.13.1.el5uekVersion:#1SMPWedJul2721:02:33EDT2011Machine:x86_64Instancename:G10R25Redothreadmountedbythisinstance:1Oracleprocessnumber:15Unixprocesspid:3724,image:oracle(TNSV1-V3)SatJul702:29:412012LENGTH:160ACTION:7CONNECTDATABASEUSER:1/PRIVILEGE:6SYSDBACLIENTUSER:6oracleCLIENTTERMINAL:5pts/0STATUS:10DBID:102652277393SatJul702:29:422012LENGTH:173ACTION:19ALTERDATABASEOPENDATABASEUSER:1/PRIVILEGE:6SYSDBACLIENTUSER:6oracleCLIENTTERMINAL:5pts/0STATUS:10DBID:102652277393SatJul702:29:462012LENGTH:172ACTION:18select*fromdualDATABASEUSER:1/PRIVILEGE:6SYSDBACLIENTUSER:6oracleCLIENTTERMINAL:5pts/0STATUS:10DBID:102652277393,Audit审计记录用户行为,内核函数Kzasydmp()为强制的SYSDBA/SYSOPER审计写出审计记录到OS文件、SYSLOG或者XML文件在windows系统上,打印审计记录到EventLog(DB_User,OS_Privilege,Client_User,Client_Termninal,Status,SQL_Text)在Unix平台上若设置了AUDIT_SYSLOG_LEVEL,审计记录发送给syslog这个后台服务否则生成一个审计文件_.aud,Audit审计记录用户行为,对象级别的审计例如:AUDITSELECTONMACLEAN.TEST;语句级别的审计例如:AUDITCREATETABLEBYMACLEAN;权限级别的审计例如:AUDITSELECTANYTABLEBYMACLEAN;,Audit审计记录用户行为,部分标准审计选项:AUDITBYSESSION针对用户和会话例如:AUDITSELECTONMACLEAN.TABBYSESSION;AUDITBYACCESS针对每一个可审计的操作例如:AUDITSELECTONMACLEAN.TABBYACCESS;AUDITWHENEVERSUCCESSFUL仅审计执行成功的操作例如:AUDITCONNECTWHENEVERSUCCESSFUL;AuditWHENEVERNOTSUCCESSFUL仅审计执行失败的操作例如:AUDITCONNECTWHENEVERNOTSUCCESSFUL,Audit审计记录用户行为,细粒度审计FineGrainedAuditing(FGA)FGA策略通过DBMS_FGA包与表/视图/同义词关联起来例如:beginDBMS_FGA.ADD_POLICY(object_schema=scott,object_name=emp,policy_name=mypolicy1,audit_condition=salcomm,sal,handler_schema=NULL,handler_module=NULL,enable=TRUE,statement_types=INSERT,UPDATE,audit_trail=DBMS_FGA.XML+DBMS_FGA.EXTENDED,audit_column_opts=DBMS_FGA.ANY_COLUMNS);end;,Audit审计记录用户行为,标准审计:audsucc()/audfail()是审计的主要入口,针对成功/不成功的审计操作会进一步调用auddft()例如maclean用户下的test表为成功操作审计-opiexe()-audsucc()-auddft()-audsel()-audfro()auddft()判断行为代码决定合适的审计路径audsel()调用audfro(),记录审计链上的信息audfro()首先设置已使用的对象权限,进一步检查该对象相关的审计选项,例如到底这个对象是auditbyaccess还是bysession。Byaccess调用audins(),Bysession调用audses(),Audit审计记录用户行为,启动审计必要的Init.ora实例初始化参数AUDIT_TRAIL=none|os|db|db,extended|xml|xml,extended.AUDIT_SYS_OPERATIONSOracle9i以后版本中通过设置该参数为TURE可以记录不限于CONNECT,STARTUP,SHUTDOWN的以SYSDBA或SYSOPER进行的操作。AUDIT_FILE_DEST指定审计目录(默认为$ORACLE_BASE/admin/$SID/adump)一些有用的字典视图:DBA_AUDIT_POLICIESListsFGApoliciesinthedatabase.DBA_AUDIT_TRAILListsallaudittrailentries.DBA_AUDIT_OBJECT-Listsaudittrailrecordsforallobjectsinthedatabase.DBA_FGA_AUDIT_TRAIL-Listsallauditrecordsforfine-grainedauditing.DBA_COMMON_AUDIT_TRAIL-Listsallstandardandfine-grainedaudittrailentries,mandatoryandSYSauditrecordswritteninXMLformat.,- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 深入浅出 Oracle 数据库 安全 知识
装配图网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文