当前位置: 首页 > Oracle, oracle 11g > 正文

Windows环境ORA-12638错误及SYS用户登录权限验证

昨天一个客户朋友在他的办公电脑(Windows XP)上安装ORACLE 11gR2的时候,安装ORACLE软件的时候没出现问题,但是在DBCA建库的时候,出现ORA-12638错误。

ORA-12638 : 身份证明检索失败

通过查看资料,这是个和ORACLE的高级安全性验证有关,也可以说是和权限有关的错误,原因是由于Oracle不能应用操作系统认证而导致,经询问,这个朋友的电脑的用户是域用户,而这个问题正好和域用户有关,解决方法是将sqlnet.ora文件里的SQLNET.AUTHENTICATION_SERVICES= (NTS)注释掉或者将这个参数改为SQLNET.AUTHENTICATION_SERVICES= (NONE),当然也可以直接把sqlnet.ora文件做备份后删掉。

# 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 = (NTS)
SQLNET.AUTHENTICATION_SERVICES = (NONE)

NTS是Windows操作系统登录数据库的验证方式,也可以理解成SQLNET.AUTHENTICATION_SERVICES = (NTS)只对Windows系统有效,这个参数等于NTS的含义是即可以用口令验证,又可以用操作系统验证的方式来登录ORACLE数据库,这个参数等于NONE表示只允许使用口令验证的方式来登录数据库,而一般情况下域用户不能应用操作系统认证而身份证明检索失败。
也有网友介绍可以通过netmgr来关闭ORACLE的高级安全验证,操作如下:
首先,打开netmgr,可以在CMD命令行输入netmgr后回车打开,也可以在开始菜单里打开。

然后点击本地——>ORACLE高级安全。

然后将所选的NTS去掉即可。

此时,操作系统认证已关闭,不是用密码直接登录数据库就会报权限不足错误。

C:Documents and SettingsAdministrator>sqlplus / as sysdba
ERROR:
ORA-01031: insufficient privileges
Enter user-name:

ORACLE登录认证的两种方式介绍:
ORACLE普通用户的密码是存在数据库的数据字典里,所以普通用户只有在数据库OPEN状态下才能登录数据库,但有两种用户可以在数据库没有打开的状态下登录数据库,这就是具有SYSDBA或者SYSOPER权限的用户,这两种用户登录数据库有两种方式,操作系统(OS)认证和密码文件认证,用户到底采用哪种方式登录,只要取决于sqlnet.ora文件中的SQLNET.AUTHENTICATION_SERVICES参数,该参数的值设置为NTS,允许用户使用操作系统认证,此时用户可以不使用密码直接登录数据库,例如:

# 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 = (NTS)

此时用户可以不输入密码直接通过操作系统验证的方式登录数据库。

C:Documents and SettingsAdministrator>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on 星期一 12月 12 09:37:00 2011
Copyright (c) 1982, 2010, Oracle.  All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>

如果将SQLNET.AUTHENTICATION_SERVICES参数的值设置为NONE,则关闭操作系统认证,此时用户只能通过密码文件认证的方式登录数据库,例如:

# 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)

此时操作系统验证的方式已经不能登录数据库。

C:Documents and SettingsAdministrator>sqlplus / as sysdba
ERROR:
ORA-01031: insufficient privileges
Enter user-name:

用户只能通过密码文件验证的方式登录数据库。

C:Documents and SettingsAdministrator>sqlplus sys/oracle as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on 星期一 12月 12 13:25:24 2011
Copyright (c) 1982, 2010, Oracle.  All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>

用户能否通过密码文件验证成功登录数据库,受以下两个因素制约。
1. 参数文件中的remote_login_passwordfile参数,该参数有以下3个值可以设置。
NONE:指示Oracle系统不使用密码文件,拥有SYS权限的用户通过操作系统验证的方式登录数据库;
EXCLUSIVE:指只有一个数据库实例可以使用此密码文件。只有在此设置下的密码文件可以包含有除INTERNAL/SYS以外的用户信息,即允许将系统权限SYSOPER/SYSDBA授予除INTERNAL/SYS以外的其他用户(10g和11g默认)。
SHARED:指可有多个数据库实例可以使用此密码文件。在此设置下只有INTERNAL/SYS帐号能被密码文件识别,即使文件中存有其他用户的信息,也不允许他们以SYSOPER/SYSDBA的权限登录。
可以通过下面的命令查看remote_login_passwordfile参数的值。

SQL> show parameter passwordfile
NAME                                 TYPE        VALUE
------------------------------------ ----------- ---------
remote_login_passwordfile            string      EXCLUSIVE

可以通过查询V$PWFILE_USERS视图来查看拥有SYSDBA/SYSOPER权限的用户信息。

SQL> select * from V$PWFILE_USERS;
USERNAME                       SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS                            TRUE  TRUE  FALSE

2. 密码文件是否存在,密码是否正确。
在REMOTE_LOGIN_PASSWORDFILE参数设置为EXCLUSIVE、SHARED情况下,拥有SYSDBA和SYSOPER权限的用户可以使用密码文件验证的方式登录数据库,Oracle搜索密码文件的次序为:
1) 在系统注册库中查找ORA_SID_PWFILE参数值(它为密码文件的全路径名);
2) 若未找到,则查找ORA_PWFILE参数值;
3) 若仍未找到,则使用缺省值ORACLE_HOMEDATABASE\PWDSID.ORA;
结合以上信息,Oracle进行权限验证的大致顺序如下:
1. 根据SQLNET.AUTHENTICATION_SERVICES的值决定是进行操作系统验证还是密码文件验证的方式登录数据库。
2. 如果是操作系统验证的方式,根据当前用户的用户组判断是否具有SYSDBA权限,如果操作系统验证失败,则进行密码文件验证。
3. 如果是密码文件验证的方式,REMOTE_LOGIN_PASSWORDFILE的值以及密码文件是否存在决定了验证是否成功。

本文固定链接: http://www.dbdream.com.cn/2011/12/windows%e7%8e%af%e5%a2%83ora-12638%e9%94%99%e8%af%af%e5%8f%8asys%e7%94%a8%e6%88%b7%e7%99%bb%e5%bd%95%e6%9d%83%e9%99%90%e9%aa%8c%e8%af%81/ | 信春哥,系统稳,闭眼上线不回滚!

该日志由 dbdream 于2011年12月12日发表在 Oracle, oracle 11g 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: Windows环境ORA-12638错误及SYS用户登录权限验证 | 信春哥,系统稳,闭眼上线不回滚!
关键字: , ,

Windows环境ORA-12638错误及SYS用户登录权限验证:等您坐沙发呢!

发表评论

快捷键:Ctrl+Enter