首页 > 数据库 > Oracle > ORACLE在“域”上的问题【转】
查看G:oracle10.2.0NETWORKADMINsqlnet.ora文件内容如下:
# sqlnet.ora Network Configuration File: #G:oracle10.2.0NETWORKADMINsqlnet.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客户端sqlplussys/password@tnsnameas sysdba以SYSDBA身份登陆到数据库系统里。
为了确保rman备份工具能通过os认证登陆到数据库系统,修改G:oracle10.2.0NETWORKADMINsqlnet.ora文件内容
SQLNET.AUTHENTICATION_SERVICES=(NONE)改为:
SQLNET.AUTHENTICATION_SERVICES=(NTS)
这样ORACLE的本地OS认证就没问题了,RMAN也能直接通过OS认证登陆数据库进行备份(不需要提供数据库密码)。
但是由于数据库client机c1跟数据库服务器db1(开文档开头环境说明)不在同一个域,C1库连接数据库时报ora-12638 身份证明检索失败的错误。查看client机c1的G:oracle10.2.0NETWORKADMINsqlnet.ora文件内容如下:
SQLNET.AUTHENTICATION_SERVICES= (NTS)
查看METALINK后ORACLE官方提供的解决方法如下:修改客户端G:oracle10.2.0NETWORKADMINsqlnet.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> connectUSERNAME/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> connectUSERNAME/PASSWORD@TNSNAME
Connected.
现象3、当客户端Site(B)以本机身份登录时,则不论 Site(B) 的 sqlnet.ora文件中的这一项 SQLNET.AUTHENTICATION_SERVICES = (NTS) 还是被注释掉
#SQLNET.AUTHENTICATION_SERVICES= (NTS) 或 SQLNET.AUTHENTICATION_SERVICES= (NONE),均可以正常连接数据库
SQL> connectUSERNAME/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博客 ” ,链接:https://blog.itpub.net/13442480/viewspace-1028973/ ,如需转载,请注明出处,否则将追究法律责任。