【概要】讨论操作系统认证和口令文件认证及有关的两个参数:
SQLNET.AUTHENTICATION_SERVICES,REMOTE_LOGIN_PASSWORDFILE
【环境】rhce5.0+oracle 10g.r2
【内容】操作系统认证:
我们在本机以sysdba用户登陆数据时,常使用如下命令:
[oracle@secdb1~]$ sqlplus / as sysdba
这条命令使用了操作系统认证的方式进行了登陆,我们不需要使用任何用户名和密码便进行了成功登陆,任何可以登陆到操作系统的人都可以轻易进入以管理员的身份进入数据库,出于安全的考虑,我想禁用[操作系统认证]。此时,可以通过参数SQLNET.AUTHENTICATION_SERVICES进行设置:
SQLNET.AUTHENTICATION_SERVICES = (ALL)
对Linux系统,支持OS认证和口令文件认证。
对Windows系统,实际实验是不支持此参数,验证失败。
SQLNET.AUTHENTICATION_SERVICES = (NTS)
此设置值仅用于Windows NT系统,此设置同时支持OS认证和口令文件认证,只有在设置了(NTS)值之后运行在Windows系统上的Oracle才支持OS认证。
SQLNET.AUTHENTICATION_SERVICES = (NONE)
此设置值在Windows和Linux是作用一样的,指定Oracle只使用口令文件认证。
不设置此参数或SQLNET.AUTHENTICATION_SERVICES =
对Linux系统,默认支持OS认证和口令文件认证。
对Windows系统,默认只支持口令文件认证,不支持OS认证。
此参数在linux下存在于$ORACLE_HOME/network/admin/sqlnet.ora中,默认没有此文件,可以手动添加。
[oracle@secdb1 admin]$ pwd
/u01/app/oracle/product/10.2.0/db_1/network/admin
[oracle@secdb1 admin]$ vi sqlnet.ora
添加如下参数:
SQLNET.AUTHENTICATION_SERVICES=(none)
此时,我们在尝试使用操作系统认证登陆:
[oracle@secdb1 admin]$ export ORACLE_SID=PROD
[oracle@secdb1 admin]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Mar 13 13:12:09 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
ERROR:
ORA-01031: insufficient privileges
显然无法正常登陆
我们尝试将此参数改为all
SQLNET.AUTHENTICATION_SERVICES=(all)
再次尝试以系统认证的方式登陆
oracle@secdb1 admin]$ export ORACLE_SID=PROD
[oracle@secdb1 admin]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Mar 13 13:13:07 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
SYS@PROD>
显然可以成功登陆
(虽然,此参数可以禁用操作系统认证,但是此参数可以再操作系统上任意改动,我们依然无法彻底有效地防止可以登陆到系统的人员对数据库的访问)
口令文件:
远程客户端登陆数据时如果以ASSYSDBA的身份登陆,需要使用外部的口令文件,口令文件的使用受参数REMOTE_LOGIN_PASSWORDFILE={NONE |SHARED}的控制。
REMOTE_LOGIN_PASSWORDFILE=(NONE): 不使用口令文件
REMOTE_LOGIN_PASSWORDFILE=(SHARED): 一个或多个数据库可以共享使用一个密码文件。
补充: EXCLUSIVE
是为了向后兼容而在10g里也被支持的一个值,但在10g里它的作用和shared已经是一样的了。
(一)在服务器端,如果我们禁用了操作系统认证,此时以SYSDBA登陆数据库就需要使用外部密码文件:
[oracle@secdb1 admin]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Mar 13
Copyright (c) 1982, 2005, Oracle. All rights reserve
ERROR:
ORA-01031: insufficient privileges
使用密码文件:
[oracle@secdb1 admin]$ sqlplus sys/oracle as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Mar 13 Copyright(c) 1982, 2005, Oracle. All rightsreserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 -Production
With the Partitioning, Oracle Label Security, OLAP and DataMining Scoring Engine options
如果我们同时通过修改参数禁用了密码文件:
SYS@PROD>show parameter remote_login_passwordfile;
NAME TYPE VALUE
-------------------------- -------- ---------- remote_login_passwordfile string EXCLUSIVE
SYS@PROD>alter system set remote_login_passwordfile=none scope=spfile;
Systemaltered.
SYS@PROD>shutdown immediate;
Databaseclosed.
Databasedismounted.
ORACLEinstance shut down.
SYS@PROD>startup
ORA-01031:insufficient privileges
可以看到,此时因为无法使用外部的口令文件,我们已经无法重新启动数据库了。此时,只好改回操作系统认证登陆数据库,然后将此参数改回。
SQLNET.AUTHENTICATION_SERVICES=(all)
[oracle@secdb1admin]$ sqlplus / as sysdba
SQL*Plus:Release 10.2.0.1.0 - Production on Wed Mar 13 13:58:31 2013
Copyright(c) 1982, 2005, Oracle. All rightsreserved.
Connectedto an idle instance.
SYS@PROD>startup
ORACLEinstance started.
TotalSystem Global Area 314572800 bytes
FixedSize 1219184 bytes
VariableSize 92276112 bytes
DatabaseBuffers 218103808 bytes
RedoBuffers 2973696 bytes
Databasemounted.
Databaseopened.
SYS@PROD>alter system set remote_login_passwordfile=exclusive scope=spfile;
Systemaltered.
重启使参数生效。
到此,我们可以清楚的看到了口令文件认证和操作系统认证的登陆方式。接下来,我们在来从客户端的角度更清晰的解析一下口令文件。
(二) 在客户端,我们可以如下命令登陆数据库(注意:此时登陆机器是secdb2,上面的实验环境是secdb1机器):
[oracle@secdb2admin]$ sqlplus sys/oracle@PROD as sysdba
SQL*Plus:Release 10.2.0.1.0 - Production on Wed Mar 13 14:24:07 2013
Copyright(c) 1982, 2005, Oracle. All rightsreserved.
Connectedto an idle instance.
SYS@PROD>
此时使用了口令文件,如果在服务器端我们把口令文件禁用:
SYS@PROD>alter system set remote_login_passwordfile=none scope=spfile;
Systemaltered.
重启使生效
此时客户端再来连接PROD数据库:
[oracle@secdb2admin]$ sqlplus sys/oracle@PROD as sysdba
SQL*Plus:Release 10.2.0.1.0 - Production on Wed Mar 13 14:30:34 2013
Copyright(c) 1982, 2005, Oracle. All rightsreserved.
ERROR:
ORA-01017:invalid username/password; logon denied
无法连接到PROD数据库
此时再一次清楚的看到了口令文件的作用,以及如何对其进行禁用管理。
Ballontt
2013/3/13
---end---