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】

今天在客户那里遇到本地无法登陆数据库的问题:

  1. 使用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记录存在。

    说明 密码文件生效,但是本地登陆方式依然不行。

  1. 分析原因 根据网络资料:

"本地登录"不会调用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之后,该情况依然如此。不知道是何解???