两个和安全相关的Oracle参数演进

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 两个和安全相关的Oracle参数演进

上次分享中介绍了两个和Oracle安全相关的参数,一个是o7_dictionary_accessibility,一个是remote_os_authent,比较小众的知识点,了解即可。

1.o7_dictionary_accessibility
从字面意思上,可能有朋友会猜到o7的含义,没错,这个参数主要是为了向下兼容Oracle 7版本的特性,官方手册中对其的描述,

作用大致有两个:
(1) 会阻止具有SELECT ANY TABLE系统权限的用户访问数据字典的基表。
(2) 确保了SYS用户只能以SYSDBA身份登录。

要是还觉得晦涩的话,我们用实验来说明他的作用,o7_dictionary_accessibility默认值是false,
两个和安全相关的Oracle参数演进

(1) 首先使用SYS账户,为BISAL用户授予SELECT ANY TABLE系统权限,此时使用BISAL用户是无法查询数据字典表信息的,会提示ORA-00942错误。
两个和安全相关的Oracle参数演进

(2) 使用sys账户但未使用SYSDBA角色登陆,会提示ORA-28009错误,要求sys用户必须使用SYSDBA或SYSOPER角色,
两个和安全相关的Oracle参数演进

接下来我们修改o7_dictionary_accessibility的值,由于其只能使用spfile修改,因此需要重启实例生效,
两个和安全相关的Oracle参数演进

(1) 此时使用BISAL用户就可以查询数据字典表信息了,
两个和安全相关的Oracle参数演进

(2) 使用sys但不用SYSDBA角色登陆,此时是可以,
两个和安全相关的Oracle参数演进

但由于不是SYSDBA管理员,因此不能执行停库启库等操作。

说明:
(1) 11g下o7_dictionary_accessibility默认值是false,说明了Oracle在安全性上的要求更加严格了,sys用户必须使用SYSDBA或SYSOPER角色登陆。
(2) 数据字典表属于系统表,即使有了SELECT ANY TABLE这个权限,对于普通用户来说还是只能访问其他用户的用户表,如果需要普通用户访问数据字典表,还是可以使用SELECT ANY DICTIONARY或SELECT_CATAOG_ROLE授权来做。

2.remote_os_authent
官方对于这个参数的描述,这是一个deprecated的参数,jdk的api中经常会看见这个词deprecated,表示这是一个过时废弃的参数,仅仅为了向下兼容使用,含义是是否允许和OS_AUTHENT_PREFIX参数一起来授权远程客户端的访问。
两个和安全相关的Oracle参数演进

他提到了另一个参数OS_AUTHENT_PREFIX,默认值是OPS$,
两个和安全相关的Oracle参数演进

查看默认值,
两个和安全相关的Oracle参数演进

乍一看可能不太好理解,实验一看就能明白了,首先改为TRUE,重启,
两个和安全相关的Oracle参数演进

注意这启动的时候提示ORA-32004错误,包括alert中也会有,但这只是一个warning信息,就是因为此时使用了一个已经废弃了的参数,原则上是不应该使用的,但即使使用了也不会阻止,只会提醒。

远程客户端服务器上创建一个名为oracle的操作系统用户,数据库中创建一个”OS_AUTHENT_PREFIX+操作系统用户名”的用户,即ops$oracle,并授予create session权限,注意此处create user使用的是identified externally语法,未设置密码,
两个和安全相关的Oracle参数演进

配置访问数据库的tns连接串,使用/nolog登陆sqlplus,并用/@remote方式登陆数据库,
两个和安全相关的Oracle参数演进
可以看出,我在未输入密码的情况下,就通过系统认证的方法,登陆了数据库,用户就是之前创建的ops$oracle。

说明:
通过设置remote_os_authent,结合操作系统用户名,就可以绕过密码,直接登陆数据库,方便了远程客户端的访问,但增加了系统的不安全性,因此11g下此参数默认值是false,而且属于deprecated类型,符合Oracle日益更严格的安全机制要求。

总结:
系统都是从不成熟到成熟,一点一点演进发展而来的,Oracle亦如此,通过一些参数默认值的取值变化,或者参数是否依旧有效,就可以看出演进过程中关注点的变化,换句话说,任何一处变动都有他的原因,用一个词儿描述就是:“讲究”。

如果您觉得此篇文章对您有帮助,欢迎关注微信公众号:bisal的个人杂货铺,您的支持是对我最大的鼓励!共同学习,共同进步:)

两个和安全相关的Oracle参数演进
本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 两个和安全相关的Oracle参数演进


 上一篇
PMON主动调用的频率控制 PMON主动调用的频率控制
今天有一位兄弟问了一个问题, pmon清理失败process的频率是多少时间,还是只要process有失败,就清理? 以前感觉就是好像如果kill一个session之后立即执行其他操作,则会立即报错,但v$session中好像还是有这条
下一篇 
一种批量删除数据的方法 一种批量删除数据的方法
这两天碰见一个比较紧急的生产问题,由于还在处理中,所以暂时不能给出整体描述,但其中涉及的一个问题就是删除一张大表中的过期历史数据,针对不同的类型的表可能有不同的解决方法,比如若是按照时间做的分区表,drop partition删除分区的