Oracle的OS验证登录

用户名、密码是我们最常见的安全验证策略方法,也是我们在各种应用系统软件中采用的最多的安全保护策略。对Oracle而言,以最大限度保护系统数据安全,是不可推卸的天然职责。
 
从最早版本到今天,Oracle在用户名和密码安全策略方面不断的加以改进,比如,进入11g之后,Default Profile要求定期进行用户密码修改操作,用户密码加密算法强化,以及对dba_users等数据字典视图进行优化改进。今天我们要讨论的是一种Oracle的另一种验证策略——OS验证策略。
 
这里,我们要进行一定澄清。最常见的OS验证策略,发生在Oracle服务器端的机器上。突出的表现是:如果我们通过了操作系统层面验证,也就是登录了服务器本机(Remote Desktop或者SecurCRT),Oracle就认为当前用户已经可以通过认证,不需要额外的数据库验证。当然,这要求操作系统用户归属在系统特定用户组,如Linux中的oinstall、dba。比如我们经常启动关闭服务器使用的conn /方式,就是这个类型登录验证方法。注意:通过在sqlnet.ora中参数的配置,我们是可以关闭这个特性的。
 
普通的OS验证策略两个特点:一个是服务器本地生效,客户端匿名登录无效。另一个只能登录为管理员sys,不能其他用户。那么,有没有方法实现客户端远程匿名登录,而且实现非sys用户呢?

--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

本篇我们就来介绍这个方法。 

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层面验证。

相关推荐