Oracle的OS验证登录(2)

2、服务器端OS验证配置

Oracle的OS层面验证,最直接的关联参数就是os_authent_prefix,默认取值为ops$。这种技术是很简单的,是建立在操作系统用户名与数据库用户名之间的映射规则上。
 
Oracle规定,如果尝试连接数据库的操作系统用户名添加参数os_authent_prefix作为前缀之后,与数据库某一个特定用户名schema相同,那么就可以实现OS验证配置。注意:这个规则是在服务器端成立的。比如:如果当前连接的操作系统名为oracle,os_authent_prefix为ops$,如果此时数据库中包括一个为ops$oracle的用户,是可以在服务器端进行匿名登录的。
 
下面进行测试,当前Linux服务器端OS用户名为oracle,也是oinstall和dba组成员。

[oracle@localhost ~]$ id

uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba),502(oper) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
 
 

创建用户ops$oracle,授予一定权限。

SQL> create user ops$oracle identified by oracle;

User created.

SQL> grant connect, resource to ops$oracle;

Grant succeeded.

这样conn /后不带as sysdba登录就允许通过了。

SQL> conn /

Connected.

SQL> show user

USER is "OPS$ORACLE"

如果添加了as sysdba,匿名管理员登录同样成立。

SQL> conn / as sysdba 

Connected.

SQL> show user

USER is "SYS"

这个规则在服务器端还是问题不大,在现实环境中实际意义也不是很大。但是,这个特性势必会引起一个想法:匿名远程登录是否可以实现?

3、匿名OS验证远程登录

在之前笔者的文章中,我们讨论过什么是“远程登录”。结论是:对Oracle而言,只要通过监听器程序的过程,Oracle都会将其作为远程登录。而不是去探究登录动作是不是服务器端发生。要经过监听器程序,最直接的就是登录中加入@地址标记符。
 
我们首先在服务器端进行试验,其上已经有sicspcdb的本地连接命名。

[oracle@localhost ~]$ tnsping sicspcdb

TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 14-JUL-2014 17:47:08
 
 

Copyright (c) 1997, 2013, Oracle.  All rights reserved.

Used parameter files:

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = sicspcdb)))
 
OK (0 msec)

测试服务器端OS匿名验证。

SQL> conn /@sicspcdb

ERROR:

ORA-01017: invalid username/password; logon denied

SQL> conn /@sicspcdb as sysdba 

ERROR:

ORA-01017: invalid username/password; logon denied

远程匿名登录,Oracle默认是关闭的。这个在实际生产环境中非常有必要,远程客户端对于Oracle而言是不安全可靠的。如果希望开启,需要调整参数remote_os_authent。
 
 

SQL> alter system set remote_os_authent=true;

alter system set remote_os_authent=true

*

ERROR at line 1:

ORA-02095: specified initialization parameter cannot be modified

该参数需要重启数据库。

SQL> alter system set remote_os_authent=true scope=spfile;

System altered.

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance

ORACLE instance started.

Total System Global Area 2.0911E+10 bytes

Fixed Size                  2262368 bytes

Variable Size            1.1677E+10 bytes

Database Buffers        9193914368 bytes

Redo Buffers              38170624 bytes

Database mounted.

Database opened.

注意:我们修改参数之后,重启Oracle报提示过期参数出现在实例启动环节。这个现象我们注意下来,之后讨论!

Os参数修改成功。

SQL> show parameter os

NAME                                TYPE        VALUE

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

(篇幅原因,有省略……)

os_authent_prefix                    string      ops$

os_roles                            boolean    FALSE

remote_os_authent                    boolean    TRUE

remote_os_roles                      boolean    FALSE

timed_os_statistics                  integer    0

为了后续操作,生成一份pfile。

SQL> create pfile from spfile;

File created.

此时,在Linux服务器端OS匿名登录成功。

SQL> conn /  --服务器本地登录成功

Connected.

SQL> conn /@sicspcdb –-服务器远程匿名登录成功

Connected.

SQL> show user

USER is "OPS$ORACLE"

SQL> conn /@sicspcdb as sysdba

ERROR:

ORA-01017: invalid username/password; logon denied –sys远程匿名登录失败!

下面我们在windows客户端上进行测试,看远程客户端OS匿名登录是否成功。Windows操作系统用户名为admin,需要在数据库中进行额外配置。

SQL> create user ops$admin identified by oracle;

User created.

SQL> grant connect, resource to ops$admin;

Grant succeeded.

在windows本地测试:

--本地TNS名称验证

C:\Users\admin>tnsping sicspcdb_linux_bk

TNS Ping Utility for 64-bit Windows: Version 11.2.0.4.0 - Production on 14-7月 -

2014 18:04:25

Copyright (c) 1997, 2013, Oracle.  All rights reserved.

已使用的参数文件:

D:\app\admin\product\11.2.0\dbhome_1\network\admin\sqlnet.ora

已使用 TNSNAMES 适配器来解析别名

尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.1

6.19.2)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = sicspcdb)))

OK (10 毫秒)

登录测试。

C:\Users\admin>sqlplus /nolog

SQL*Plus: Release 11.2.0.4.0 Production on 星期一 7月 14 18:04:45 2014

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

SQL> conn /@sicspcdb_linux_bk

已连接。

SQL> show user

USER 为 "OPS$ADMIN"

实验成功!通过参数remote_os_authent的开启,可以帮助我们实现客户端的匿名登录。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/3f8c7bc3689e3178492060cd43361767.html