windows 2003域环境下oracle认证方式问题分析及解决办法


-----------------------------------------------------------------------------------------------------------


C:\Documents and Settings\localadmin>rman target /

恢复管理器: Release 10.2.0.1.0 - Production on 星期一 10月 26 18:40:30 2009

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

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00554: 内部恢复管理器程序包初始化失败
RMAN-04005: 目标数据库中存在错误:
ORA-01031: 权限不足

尝试通过本地操作系统认证登陆:
C:\Documents and Settings\localadmin>sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 10月 26 18:40:20 2009

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

ERROR:
ORA-01031: 权限不足
请输入用户名:


查看G:\oracle\10.2.0\NETWORK\ADMIN\sqlnet.ora文件内容如下:

# sqlnet.ora Network Configuration File: #G:\oracle\10.2.0\NETWORK\ADMIN\sqlnet.ora
# Generated by Oracle configuration tools.

# This file is actually generated by netca. But if customers choose to
# install "Software Only", this file wont exist and without the native
# authentication, they will not be able to connect to the database on NT.
SQLNET.AUTHENTICATION_SERVICES=(NONE)

SQLNET.AUTHENTICATION_SERVICES 参数解释:
数据库的认证方式:

一种是操作系统认证方式;
一种是密码文件认证方式.

sqlnet.ora文件中的:SQLNET.AUTHENTICATION_SERVICES= (NTS/NONE)
NTS:操作系统认证
NONE:口令文件认证

NTS:操作系统认证表示只要你登陆到操作系统上的OS用户在ORA_DBA GROUP里,你不需要SYSDBA的密码就可以直接登陆,直接在cmd里运行
sqlplus "/as sysdba"即可以以SYSDBA身份登陆数据库。

NONE:口令文件认证表示你不能登陆到OS上,但是通过如下方法后可以以SYSDBA身份登登陆数据库系统里:
建立passwordfile密码文件,确保REMOTE_PASSWORDFILE = EXCLUSIVE.
这样就可以通过ORACLE客户端sqlplus sys/password@tnsname as sysdba以SYSDBA身份登陆到数据库系统里。


为了确保rman备份工具能通过os认证登陆到数据库系统,修改G:\oracle\10.2.0\NETWORK\ADMIN\sqlnet.ora文件内容
SQLNET.AUTHENTICATION_SERVICES=(NONE)
改为:
SQLNET.AUTHENTICATION_SERVICES=(NTS)

C:\Documents and Settings\Administrator>RMAN TARGET /

恢复管理器: Release 10.2.0.1.0 - Production on 星期一 10月 26 19:16:22 2009

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

连接到目标数据库: DB (DBID=3180790609)

RMAN> EXIT


恢复管理器完成。

C:\Documents and Settings\Administrator>sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 10月 26 19:16:39 2009

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


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

SQL>

这样ORACLE的本地OS认证就没问题了,RMAN也能直接通过OS认证登陆数据库进行备份(不需要提供数据库密码)。

但是由于数据库client机c1跟数据库服务器db1(开文档开头环境说明)不在同一个域,C1库连接数据库时报ora-12638 身份证明检索失败
的错误。查看client机c1的G:\oracle\10.2.0\NETWORK\ADMIN\sqlnet.ora文件内容如下:
SQLNET.AUTHENTICATION_SERVICES= (NTS)


查看METALINK后ORACLE官方提供的解决方法如下:
修改客户端G:\oracle\10.2.0\NETWORK\ADMIN\sqlnet.ora文件内容
SQLNET.AUTHENTICATION_SERVICES= (NTS)

SQLNET.AUTHENTICATION_SERVICES= (NONE)


问题解决。

Oracle 解释如下:
Either create trust between the two domains or change the client or server
SQLNET.AUTHENTICATION_SERVICES such that NTS in not negotiated in the connection handshake.
NTS is only negotiated if both client and server have SQLNET.AUTHENTICATION_SERVICES
set to NTS.

i.e. SQLNET.AUTHENTICATION_SERVICES=NONE

 

总结如下:
Site(A, Server) Windows 2003(处于DR1域中), oracle9206(opatch5)
Site(B, Client) windows 环境(2000,2003,处于DR2域中),oracle 数据库或客户端

Site(A),Site(B) 的oraclenetworkadmin目录下都有文件sqlnet.ora
该文件中都有这一项 SQLNET.AUTHENTICATION_SERVICES= (NTS)

现象1、当Site(B)以域domain (此域不同于site(A)的域)身份登录机器时,
并且Site(A),Site(B) 中的sqlnet.ora 都有这一项 SQLNET.AUTHENTICATION_SERVICES=(NTS) 时,
则会出现:

SQL> connect USERNAME/PASSWORD@TNSNAME
ERROR:
ORA-12638: Credential retrieval failed


Warning: You are no longer connected to ORACLE.
SQL>


现象2(接上)、此时,若把客户端Site(B) 的 sqlnet.ora文件中的
这一项 SQLNET.AUTHENTICATION_SERVICES 被注释掉
#SQLNET.AUTHENTICATION_SERVICES= (NTS) 或 SQLNET.AUTHENTICATION_SERVICES= (NONE),
则均可以正常连接数据库
SQL> connect USERNAME/PASSWORD@TNSNAME
Connected.


现象3、当客户端Site(B)以本机身份登录时,则不论 Site(B) 的 sqlnet.ora文件中的
这一项 SQLNET.AUTHENTICATION_SERVICES = (NTS) 还是被注释掉
#SQLNET.AUTHENTICATION_SERVICES= (NTS) 或 SQLNET.AUTHENTICATION_SERVICES= (NONE),
均可以正常连接数据库
SQL> connect USERNAME/PASSWORD@TNSNAME
Connected.


原因:Site(A)与Site(B)为不同的域,并且Site(A),Site(B)
都采用操作系统认证(NTS)方式,则需要双方建立信任关系,要不就一方不采用(NTS)认证。如:
SQLNET.AUTHENTICATION_SERVICES=NONE 或
#SQLNET.AUTHENTICATION_SERVICES=NTS

解决方法:
1、对两个域建信任关系(没测试此方法)。
2、数据库或客户端的sqlnet.ora 中的 SQLNET.AUTHENTICATION_SERVICES=(NONE)
或被注释掉 #SQLNET.AUTHENTICATION_SERVICES。


 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28419/viewspace-617474/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28419/viewspace-617474/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值