Oracle数据库"本地登录"和"远程登录"的表面区别就在于是否有"@"符号
Oracle数据库"本地登录"和"远程登录"的表面区别就在于是否有"@"符号
例如:SQL>conn username/password as sysdba就是"本地登录";
SQL>conn username/password@sid as sysdba就是"远程登录"。
这两种方式的本质区别是:
"本地登录"不会调用tnsnames.ora,也无须监听器。"本地登录"是通过环境变量ORACLE_SID来定位数据库的,如果将其删掉,则"本地登录"将会失败。
"远程登录"则必须要用到tnsnames.ora文件,并且服务器上的监听器必须是running,而与环境变量ORACLE_SID没关系。
在本地上登录Oracle数据库可以使用两种方式中任何一种,但通过网络远程登录数据库则只能使用"远程登录"。
注:"本地登录"和"远程登录"只是为了说明问题方便而用的名词
为了说明上述结论,本人作了如下实验:
当用"本地登录"方式时,将环境变量ORACLE_SID删除,结果登录失败;
而将tnsnames.ora文件删除并且不启动监听器,"本地登录"仍然登录正常。
相反,当用"远程登录"方式时,将环境变量ORACLE_SID删除,并不影响其正常登录,而如果删除tnsnames.ora文件或关闭监听器,"远程登录"则会失败
系统32位还是64位?
出于性能上的考虑,安装oracle都会添加如下的行到/etc/pam.d/login 文件:
session required /lib/security/pam_limits.so 加入以上内容后,会出现控制台下(本地)无法登陆的问题。
解决方法是如果安装的是64位的操作系统,在/etc/pam.d/login 文件中,添加:session required /lib64/security/pam_limits.so
禁止oracle本地登录 及 解决 ORA-03135连接失去联系
oracle 本地登录的方式登录oracle服务端:sqlplus "/as sysdba",不需要用户名密码即可登录。
禁用方法:
1.linux下
转到目录$ORACLE_HOME/network/admin下,
cd $ORACLE_HOME/network/admin
vi sqlnet.ora
在文件sqlnet.ora中,增加一行即可:
sqlnet.authentication_services=(none)
如果应用程序时不时地报错"ORA-03135连接失去联系",该问题可能与sqlnet.ora设置参数SQLNET.EXPIRE_TIME 有关
在文件sqlnet.ora中,增加一行,单位分钟:
SQLNET.EXPIRE_TIME = 10
2.windows下
SQLNET.AUTHENTICATION_SERVICES= (NTS)是基于操作系统验证;
SQLNET.AUTHENTICATION_SERVICES= (NONE)是基于Oracle验证;
SQLNET.AUTHENTICATION_SERVICES= (NONE,NTS)是二者共存。
oracle两种认证方式总结
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 /assysdba
可以以sysdba身份登录成功,进行数据库方面的操作.
当以远程进行登录时,执行:
sqlplus /nolog
SQL>conn /assysdba
则会显示:
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认证。
遇到问题总结【20130306】
今天在客户那里遇到本地无法登陆数据库的问题:
- 使用orapwd修改密码文件过程:
----第一部分---
备份密码文件
Orapwd file=filename password=sys entries=8
Sqlplus /nolog
Conn sys/sys as sysdba
报错:没有权限
Conn sys/sys@10.1.012.33 as sysdba
报错:没有权限
Conn sys/sys@evnsid as sysdba
报错:没有权限
将备份密码文件复制回去
Conn sys/sys as sysdba
报错:没有权限
Conn sys/sys@10.1.12.33 as sysdba
可以连接
Conn sys/sys@evnsid as sysdba
可以连接
---第二部分---
1,关闭数据库,shutdown immediate;
2,删除/重命名以前的password文件,e.g: rm $ORACLE_HOME/dbs/pwdxxx;
3,重建password文件。e.g: orapwd file=$ORACLE_HOME/dbs/orapwSID password=password entries=(*这里要注意:密码文件名是:orapwSID, entries:是同时使用该帐户的最多用户数*)
4,修改initSID.ora, 添加一句:REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE,即授权允许远程以dba身份登录;
5,启动数据库:startup
Conn sys/sys as sysdba
报错:没有权限
Conn sys/sys@10.1.12.33 as sysdba
报错:没有权限
Conn sys/sys@evnsid as sysdba
报错:没有权限
---第三部分—
检查参数:
Conn sys/sys@10.1.12.33 as sysdba
Show parameter REMOTE_LOGIN_ ---- EXCLUSIVE
Select * from v$pwfile_users;
Sys记录存在。
说明 密码文件生效,但是本地登陆方式依然不行。
- 分析原因 根据网络资料:
"本地登录"不会调用tnsnames.ora,也无须监听器。"本地登录"是通过环境变量ORACLE_SID来定位数据库的,如果将其删掉,则"本地登录"将会失败。
"远程登录"则必须要用到tnsnames.ora文件,并且服务器上的监听器必须是running,而与环境变量ORACLE_SID没关系。
重新 export ORACLE_SID=envtest
Sqlplu /nolog
Conn sys/sys as sysdba
成功。
虽然找到问题的症结所在,但是在oracle的.profile文件中重新添加 export ORACLE_SID=envtest之后,该情况依然如此。不知道是何解???