Oracle 8之前的数据库,具有“select any table”权限的用户可以查询数据字典。因为这样会存在安全隐患,所以,在Oracle 8及以后的版本中,Oracle引入了这个O7_DICTIONARY_ACCESSIBILITY参数。该参数的默认值是FALSE,表示用户即使被授予“select any table”权限也不允许查询SYS用户下的数据字典,及不是真正的“select any table”权限。下面我来演示一下这个参数在10g数据库中生效方法和效力。这里仅仅是演示而已,您没有必要在自己的系统中做这样的调整,Oracle之所以引入这个参数目的也只是向前(Oracle 7)兼容而已,可以说,Oracle已经放弃了原有“select any table”权限含义,Oracle的权限控制向更深更细的道路发展。1.先来看看在10gR2环境中这个参数的默认内容和注释信息1)Oracle版本信息sys@ora10g> select * from v$version where rownum<2;BANNER----------------------------------------------------------------Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi2)使用show parameter命令查看参数内容sys@ora10g> show parameter O7_DICTIONARY_ACCESSIBILITYNAME TYPE VALUE---------------------------- --------- -------------------O7_DICTIONARY_ACCESSIBILITY boolean FALSE3)使用比较高级的方法查看一下这个参数在数据库中的注释信息,注释中已经说明,这个参数在Oracle 7版本中使用sys@ora10g> select a.ksppinm name,b.ksppstvl value,a.ksppdesc description2 from x$ksppi a,x$ksppcv b3 where a.indx = b.indx4 and a.ksppinm = 'O7_DICTIONARY_ACCESSIBILITY'5 /NAME VALUE DESCRIPTION--------------------------- ------ -------------------------------------------O7_DICTIONARY_ACCESSIBILITY FALSE Version 7 Dictionary Accessibility Support2.我们首先将“select any table”权限授予普通用户sec,在sec用户下尝试查询SYS用户下的V$SESSION视图sec@ora10g> conn / as sysdbaConnected.sys@ora10g> grant select any table to sec;Grant succeeded.sys@ora10g> conn sec/secConnected.sec@ora10g> select * from v$session;select * from v$session*ERROR at line 1:ORA-00942: table or view does not existsec@ora10g> select count(*) from sys.v_$session;select count(*) from sys.v_$session*ERROR at line 1:ORA-00942: table or view does not exist结果是显然的,在O7_DICTIONARY_ACCESSIBILITY参数为“FALSE”的情况下,sec用户即使有了“select any table”权限,也无法得到SYS用户中数据字典信息。3.我们尝试将O7_DICTIONARY_ACCESSIBILITY参数修改为“TRUE”后,再尝试一次1)第一次尝试,参数修改失败,原因是该参数被限制为不可轻易的被修改,即该参数是一个静态参数。需要使用停启数据库的方式(下面将使用spfile修改方式,当然,也可以使用pfile修改的方式)进行修改。sys@ora10g> alter system set O7_DICTIONARY_ACCESSIBILITY=true;alter system set O7_DICTIONARY_ACCESSIBILITY=true*ERROR at line 1:ORA-02095: specified initialization parameter cannot be modified2)使用spfile修改方式对O7_DICTIONARY_ACCESSIBILITY参数进行修改,修改后重新启动数据库使之生效(真实生产环境中启停数据库的代价是非常高的)sys@ora10g> alter system set O7_DICTIONARY_ACCESSIBILITY=true scope = spfile;System altered.sys@ora10g> startup force;ORACLE instance started.Total System Global Area bytesFixed Size bytesVariable Size bytesDatabase Buffers bytesRedo Buffers bytesDatabase mounted.Database opened.3)确认一下O7_DICTIONARY_ACCESSIBILITY是否真正的被修改为“TRUE”sys@ora10g> show parameter O7_DICTIONARY_ACCESSIBILITYNAME TYPE VALUE---------------------------- --------- ---------O7_DICTIONARY_ACCESSIBILITY boolean TRUE4)在确认参数修改成功之后,再次在sec用户中尝试查询v$session视图。没有问题,这次在O7_DICTIONARY_ACCESSIBILITY参数的作用下,sec用户的权限被放大了,已经可以查看“任何表”了。sys@ora10g> conn sec/secConnected.sec@ora10g> select count(*) from v$session;COUNT(*)----------19sec@ora10g> select count(*) from sys.v_$session;COUNT(*)----------20
4.Oracle 10gR2官方文档中关于
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/91921.html