用户名、密码是我们最常见的安全验证策略方法,也是我们在各种应用系统软件中采用的最多的安全保护策略。对Oracle而言,以最大限度保护系统数据安全,是不可推卸的天然职责。
从最早版本到今天,Oracle在用户名和密码安全策略方面不断的加以改进,比如,进入11g之后,Default Profile要求定期进行用户密码修改操作,用户密码加密算法强化,以及对dba_users等数据字典视图进行优化改进。今天我们要讨论的是一种Oracle的另一种验证策略——OS验证策略。
这里,我们要进行一定澄清。最常见的OS验证策略,发生在Oracle服务器端的机器上。突出的表现是:如果我们通过了操作系统层面验证,也就是登录了服务器本机(Remote Desktop或者SecurCRT),Oracle就认为当前用户已经可以通过认证,不需要额外的数据库验证。当然,这要求操作系统用户归属在系统特定用户组,如Linux中的oinstall、dba。比如我们经常启动关闭服务器使用的conn /方式,就是这个类型登录验证方法。注意:通过在sqlnet.ora中参数的配置,我们是可以关闭这个特性的。
普通的OS验证策略两个特点:一个是服务器本地生效,客户端匿名登录无效。另一个只能登录为管理员sys,不能其他用户。那么,有没有方法实现客户端远程匿名登录,而且实现非sys用户呢?
--------------------------------------------------------------------------------
在CentOS 6.4下安装Oracle 11gR2(x64)
--------------------------------------------------------------------------------
本篇我们就来介绍这个方法。
1、实验环境介绍
我们实验环境为Oracle 11g,具体版本为11.2.0.4。服务器为Linux版本。
SQL> select * from v$version;
BANNER
---------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
与本实验相关的参数保持默认状态。
SQL> show parameter os
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_lost_write_protect string NONE
diagnostic_dest string /u01/app
optimizer_index_cost_adj integer 100
os_authent_prefix string ops$
os_roles boolean FALSE
remote_os_authent boolean FALSE
remote_os_roles boolean FALSE
timed_os_statistics integer 0
默认情况下,我们只能在服务器端实现匿名登录,登录之后直接以最高权限sys的角色出现。
SQL> conn / as sysdba
Connected.
SQL> show user
USER is "SYS"
不添加as sysdba登录过程是不允许的。
SQL> conn /
ERROR:
ORA-01017: invalid username/password; logon denied
下面我们来讨论如何进行OS层面验证。