今天看了sqlplus登录本地和远程oracle服务器,记录下供大家参考。
表面上oracle“本地登录”和“远程登录”的区别在于是否有“@”符号
SQL>conn username/password as sysdba 是本地登录
SQL>conn username/password@SID as sysdba 是远程登录
一、本地登录和远程登录的本质区别是:
1)本地登录不会调用tnsnames.ora,oracle服务器也无需启动监听器;本地登录是通过环境变量ORACLE_SID来定位数据库的,如果将其删掉,则本地登录会失败。
ORACLE_SID为安装oracle数据库时自动生成的。
(1)windows系统默认的ORACLE_SID值为最后所安装的实例,查看该变量值的操作如下:
开始---运行,输入regedit打开注册表
在HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1中查看ORACLE_SID的键值,入下图
修改此键值则修改了默认登录的本地数据库实例,有资料说不修改注册表,只修改本次登录的实例可按照如下方法,本人未亲自试验,仅供参考: 在CMD窗口下,先修改ORACLE_SID的值(set ORACLE_SID=xxxx,该修改仅对当前CMD窗口有效),接着用同一CMD窗口访问数据库即可。
(2)linux可用echo $ORACLE_SID 查看ORACLE_SID的值。
(3)另外还可以登录数据库后,通过sql查看当前连接的实例
show parameter instance;
show parameter instance_name;
select * from v$instance;
2)远程登录必须要用到tnsnames.ora文件,且远程服务器上oracle的监听器必须是running,而与环境变量ORACLE_SID没有关系。
二、sqlplus登录命令
这里以远程登录为例,本地登录去掉@SID即可
开始---运行---cmd
方法一:首先sqlplus /nolog
然后connect username/password@SID
方法二:sqlplus username/password@SID
特殊情况,密码中包含@特殊符号的时候
首先sqlplus /nolog,然后connect username/"pass@word"@SID --成功登录
sqlplus username/"pass@word"@SID --登录失败
sqlplus ucmp/\"pass@word\"@opencms --登录成功
三、oracle的两种认证方式
问题:oracle 本地登录的方式登录oracle服务端:sqlplus "/as sysdba",不需要用户名密码即可登录,禁用此方式的方法:在文件sqlnet.ora中,增加一行即可:sqlnet.authentication_services=(none)
另外如果应用程序时不时地报错"ORA-03135连接失去联系",该问题可能与sqlnet.ora设置参数SQLNET.EXPIRE_TIME 有关,在文件sqlnet.ora中,增加一行,单位分钟:SQLNET.EXPIRE_TIME = 10
SQLNET.AUTHENTICATION_SERVICES= (NTS)是基于操作系统验证;
SQLNET.AUTHENTICATION_SERVICES= (NONE)是基于Oracle验证;
SQLNET.AUTHENTICATION_SERVICES= (NONE,NTS)是二者共存。
下面详细说下oracle的认证方式(摘自http://www.cnblogs.com/junnor/archive/2013/03/07/2947273.html)。
ORACLE数据库通过sqlnet.ora文件中的参数sqlnet.authentication_services,参数文件中的remote_login_passwordfile和口令文件pwdsid.ora三者协同作用实现身份认证.
Sqlnet.authentication_services=(NTS)|(NONE)
NTS:操作系统认证方式,不使用口令文件;
NONE:口令文件认证方式
Remote_login_passwordfile=(NONE)|(EXCLUSIVE)|(SHARED)
NONE:不使用口令文件,操作系统认证;
EXCLUSIVE:口令文件认证方式,但只有一个数据库实例可以使用此文件;
SHARED:口令文件认证方式,可以有多个数据库实例可以使用此文件,但此设置下只有SYS帐号能被识别,即使文件中存在其他用户的信息,也不允许他们以SYSOPER/SYSDBA登录.
(1).sqlnet.authentication_services=(NTS)
同时Remote_login_passwordfile=(NONE),此时为操作系统认证方式.
当以oracle_dba组下的用户登录进入本地的操作系统后,进行以下操作:
sqlplus /nolog
SQL>conn /as sysdba
可以以sysdba身份登录成功,进行数据库方面的操作.
当以远程进行登录时,执行:
sqlplus /nolog
SQL>conn /as sysdba
则会显示:
ERROR:ORA-01031:insufficient privileges
即不允许以sysdba身份远程登录系统,这也是OS认证这所以称为本地认证方式的原因.
(2).Sqlnet.authentication_services=(NONE),同时Remote_login_passwordfile=(EXCLUSIVE)|(SHARED),配合口令文件PWDsid.ora,此时为口令文件认证方式:
当在本地以oracle_dba组下的用户登录进入系统时,进行以下操作:
sqlplus /nolog
SQL>conn /assysdba
则会显示:
ERROR:ORA-01031:insufficient privileges
在本地或远程进行下边的操作:
sqlplus /nolog
SQL>conn sys/密码@服务名assysdba
可以进入系统,也就是说口令文件认证方式允许用户从本地或远程以sysdba身份登录,但必须提供口令字.
(3).Sqlnet.authentication_services=(NTS),同时
Remote_login_passwordfile=(EXCLUSIVE)|(SHARED),配合口令文件PWDsid.ora,此时为操作系统认证和口令文件认证同时起作用:
当在本地以oracle_dba组下的用户登录进入操作系统后,进行下边的操作:
sqlplus /nolog
SQL>conn /assysdba
可以进入系统.即操作系统认证方式登录成功.
当在远程执行:
sqlplus /nolog
SQL>conn sys/密码@服务名assysdba
同时可正常登录到数据库系统,即口令文件认证方式登录成功.
附:
要知道以下几种登陆方式不是一种概念
sqlplus /nolog
1: conn /assysdba本机登陆,使用操作系统认证,有无监听都可以
2: conn sys/password assysdba本机登陆,使用密码文件认证,有无监听都可以
3: conn sys/password@dbanote assysdba可以本机可以远程,使用密码文件认证,必须有监听,必须有tnsnames.ora,remote_login_passwordfile必须是EXCLUSIVE
说明:
从oracle的解释可以知道,SQLNET.AUTHENTICATION_SERVICES=(NTS)是WINDOWS系统专用的,对linux/UNIX是不适用的。
最后做一个简单的总结:
1、在windows下,SQLNET.AUTHENTICATION_SERVICES必须设置为NTS或者ALL才能使用OS认证;不设置或者设置为其他任何值都不能使用OS认证。
2、在linux下,在SQLNET.AUTHENTICATION_SERVICES的值设置为ALL,或者不设置的情况下,OS验证才能成功;设置为其他任何值都不能使用OS认证。