日期:2014-05-17  浏览次数:20932 次

sysdba用户远程登录问题
SQL code

--现在遇到个问题,sysdba远程登录问题
--sysdba用户无法远程登录Oracle服务器,报用户口令无效,而实质我用户口令是正确的,本地服务器端能正常登陆
--如下:

1、本地服务器端:

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\Administrator>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 6月 8 11:15:00 2011

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

SQL> conn scott/tiger                --普通用户能连接
已连接。
SQL> conn sys/lhy as sysdba          --sysdba用户也能连接
已连接。
SQL>


2、远端连接

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\513826198611162217.XQ>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 6月 8 11:26:11 2011

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

SQL> conn scott/tiger@impxepor             --普通用户能连接
已连接。
SQL> conn sys/lhy@impxepor as sysdba       --sysdba用户无法连接
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝


警告: 您不再连接到 ORACLE。
SQL>



--找了哈,没找到原因
--我本地服务器端一些参数配置如下:
SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 6月 8 11:35:38 2011

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


连接到: 
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> show user
USER 为 "SYS"
SQL> show parameter remote_login_passwordfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile            string      EXCLUSIVE
SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP
------------------------------ ----- -----
SYS                            TRUE  TRUE

SQL> 


--sqlnet.ora文件中的 SQLNET.AUTHENTICATION_SERVICES= (NTS)


--大家看看哪里的原因,我尝试过重新配置密码文件然后重启server,但是还是不行




------解决方案--------------------
sqlnet.ora文件中的 SQLNET.AUTHENTICATION_SERVICES= (NTS)

查查这个的意思,这里面设置比较绕,可能不允许远程连接
------解决方案--------------------
确实没遇到过,
已经重新安装过了,说明跟oracle本身无关。
可能跟机器的其它配置有关系。
------解决方案--------------------
这个问题确实木有遇到过,但感觉与oracle没多大关系,望解决后分享…
------解决方案--------------------
老兄
SQLNET.AUTHENTICATION_SERVICES= (NTS)
这一行要删除或者前面加#号注释掉
------解决方案--------------------
SQL> conn sys/lhy as sysdba --sysdba用户也能连接
已连接。


--本地服务端是可以不用输入密码的,也就是说随便输入什么密码都可以登录。因此这里并不能说明你的SYS用户密码就是lhy。。。

--建议在服务器端使用sysdba角色登录之后修改SYS用户的密码再重试一下。确认SYS用户的密码输入正确。
------解决方案--------------------
sqlnet.authentication_services=(NTS),在$ORACLE_HOME\network\admin\sqlnet.ora中

NTS特指的是windows系统,或者设为all,这两种情况都允许操作系统认证。

如果在unix下如果没有设置sqlnet.authentication_services,默认就是操作系统认证!或者设为all也允许操作系统认证。
参数SQLNET.AUTHENTICATION_SERVICES= (NONE,NTS)表明用户连接Oracle服务器时使用哪种验证方式
NONE表示Oracle数据库身份验证,NTS表示操作系统身份验证,两种方式可以并用。
 
数据库用sysdba登录的验证有两种方式,一种是通过os认证,一种是通过密码文件验证;登录方式有两种,一种是在数据库主机直接登录(用os认证的方式),一种是通过网络远程登录;需要设置的参数有两个,一个是SQLNET.AUTHENTICATION_SERVICES,一个是REMOTE_LOGIN_PASSWORDFILE。 

os认证:如果启用了os认证,以sysdba登录,那么我们只要用oracle软件的安装用户就能登录:sqlplus “/ as sysdba”。如果我们要禁用os认证,只利用密码文件登录,我们首先要有一个密码文件: 
orapwd file=C:\oracle\product\10.2.0\db_1\database\PWDoralocal.ora password=maximo entries=10; 
然后我们要把$ORACLE_HOME/network/admin/sqlnet.ora中设置: 
SQLNET.AUTHENTICATION_SERVICES= none

注意一下,密码文件只在数据库启动的时候加载进去,一旦加载进去,密码文件就脱离了oracle管理,所以我们用orapwd新建密码文件后,里面指定的密码要在数据重启后才能生效: 
至此,我们已经实现不用os认证(sqlplus “/ as sysdba”的方式登录不了)。那么我们怎么限制网络方面利用sysdba远程登录呢?我们可以设置初始化文件中的REMOTE_LOGIN_PASSWORDFILE