sqlplus / as sysdba报错ORA-01031: insufficient privileges的原因分析

今天碰到一个奇怪的小问题,看起来是一个非常简单的问题。
我先说一下问题背景。有一台DB服务器,因为需要搭建备库,现在找了一台已有的机器临时用一下,这台临时的服务器上已经安装了Oracle软件是11.2.0.4.0,而我们需要安装的备库版本是11.2.0.3.0所以为了兼容,所以需要在临时的服务器上再安装一套Oracle软件,把11.2.0.4的ORACLE_HOME切换过来,直接从主库拷贝了安装目录,开始克隆安装。
克隆安装的步骤其实内部就是在做relink,当然这个也没什么问题,很快就操作完成了。
在$ORACLE_HOME/clone/bin下执行下面的命令即可,$ORACLE_HOME,$ORACLE_BASE根据需要配置
 perl clone.pl ORACLE_BASE=/DATA/app/oracle ORACLE_HOME=/DATA/app/oracle/product/11.2.3/db_1  ORACLE_HOME_NAME=OraDb11g_home2
简单验证sqlplus -v没有任何问题。
$ sqlplus -v
SQL*Plus: Release 11.2.0.3.0 Production
但是尝试sqlplus / as sysdba的时候却抛出了一个错误。这个问题看起来比较奇怪,记得之前碰到过,但是全然不记得是怎么处理的了。然后重新来过。
$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Thu Dec 31 23:09:19 2015
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
ERROR:
ORA-01031: insufficient privileges
这个步骤才开始验证参数文件,密码文件还没有开始做校验,为什么会抛出这个问题呢。但是使用sysoper就看起来没有问题了。
$ sqlplus / as sysoper
SQL*Plus: Release 11.2.0.3.0 Production on Thu Dec 31 23:21:07 2015
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Connected to an idle instance.
对于这个问题,还得从几个小的细节说起,一个就是操作系统认证,对于操作系统认证对于Windows和Linux,Unix都会有一些不同的设置,但是思路都是相通。
在Linux下对应有操作系统的用户组,使得sysdba和操作系统用户组绑定起来。至于哪个是dba组,哪个是oper组,为什么sysoper就可以登录,而sysdba却不可以。这个可以参考一个文件。
为了突显出对比的效果来,我找出了正常运行的主库,config.c的内容如下:
$ORACLE_HOME/rdbms/lib/config.c
$ cat config.c
/*  SS_DBA_GRP defines the UNIX group ID for sqldba adminstrative access.  */
/*  Refer to the Installation and User's Guide for further information.  */
/* IMPORTANT: this file needs to be in sync with
              rdbms/src/server/osds/config.c, specifically regarding the
              number of elements in the ss_dba_grp array.
 */
#define SS_DBA_GRP "oinstall"
#define SS_OPER_GRP "oinstall"
#define SS_ASM_GRP ""
char *ss_dba_grp[] = {SS_DBA_GRP, SS_OPER_GRP, SS_ASM_GRP};  
而在备库机器上,config.c的内容如下:
$ cat config.c
/*  SS_DBA_GRP defines the UNIX group ID for sqldba adminstrative access.  */
/*  Refer to the Installation and User's Guide for further information.  */
/* IMPORTANT: this file needs to be in sync with
              rdbms/src/server/osds/config.c, specifically regarding the
              number of elements in the ss_dba_grp array.
 */
#define SS_DBA_GRP "dba"
#define SS_OPER_GRP "oinstall"
#define SS_ASM_GRP ""
char *ss_dba_grp[] = {SS_DBA_GRP, SS_OPER_GRP, SS_ASM_GRP};
由此一来,可以看出为什么sysoper的可以正常登录了。
来简单对比一下主库的用户组情况,发现确实存在一个用户组为dba
[oracle@rolequery product]$ id oracle
uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba),502(oper),503(asmadmin),504(asmdba)
而在备库中只有oinstall的用户组
[oracle@BX_133_45 lib]$ id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall)
那么这个问题怎么修复呢,可以在备库中创建一个对应的用户组,然后把oracle用户加入dba组中,
# groupadd dba
# usermod  -a -G dba oracle
# id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall),505(dba)
这个时候最好还是再relink一下,还是使用克隆安装的部分,不过需要在OraInventory中需要手工删除一下原本的安装信息,删除inventory.xml中的Oracle_HOME即可。
但是这个时候还是存在 ORA-01031: insufficient privileges的问题,是修改的用户的问题没有解决彻底吗。
其实还有一个就是sqlnet.authentication的服务认证,MOS( 730067.1)是这么描述的。
sqlnet.authentication_services must be set to (ALL) or to (BEQ, ) for this to work. On Windows this parameter must be set to (NTS).
这个时候再来看一看配置$ cat sqlnet.ora
# sqlnet.ora Network Configuration File: /home/U01/app/oracle/product/11.2.3/db_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
ADR_BASE = /DATA/app/oracle
所以 SQLNET.AUTHENTICATION_SERVICES= (NTS)的设置存在问题的。注释掉之后,再次登录就没有问题了。
[oracle@BX_133_45 admin]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Thu Dec 31 23:36:31 2015
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Connected to an idle instance.
那么是不是就是因为 SQLNET.AUTHENTICATION_SERVICES直接导致的,用户组不同行不行呢,都已经试到这个份上了,我就继续玩玩。
删除原有的dba组,再次尝试就会看到原有的问题。
# groupdel dba
# id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall)
# su - oracle
$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Thu Dec 31 23:09:19 2015
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
ERROR:
ORA-01031: insufficient privileges
我继续想,是不是直接修改config.c就可以了,不需要再创建一个dba组了,行不行?
$ vi config.c
#define SS_DBA_GRP "oinstall"
#define SS_OPER_GRP "oinstall"
#define SS_ASM_GRP ""
然后再次登录,发现还是有问题。所以这两者在我的这个问题里都是缺一不可。
$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Thu Dec 31 23:11:14 2015
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
ERROR:
ORA-01031: insufficient privileges
看起来一个很简单的问题,没有很快解决,看起来还是有些尴尬啊,不过知道了原委,发现这些东西还是需要好好理解。

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

转载于:http://blog.itpub.net/23718752/viewspace-1969382/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用`connect / as sysdba`命令以`sysdba`身份连接到Oracle数据库时,如果出现ORA-01031: insufficient privileges误,这通常意味着当前用户没有足够的权限来执行该操作。 解决这个问题的方法有几种: 1. 确保你使用的是正确的用户名和密码。`sysdba`权限是一种特殊权限,只有具有特定权限的用户才能以`sysdba`身份连接到数据库。请确保你使用的用户名和密码是正确的,并且具有`sysdba`权限。 2. 确认你的操作系统用户具有连接到数据库的权限。在某些情况下,你可能需要确保你的操作系统用户具有与Oracle数据库实例关联的正确操作系统权限。请检查你的操作系统用户是否具有适当的权限,并尝试使用正确的操作系统用户来连接到数据库。 3. 检查用户是否具有必要的权限。即使以`sysdba`身份连接到数据库,你仍然需要确保你连接的用户具有执行所需操作的权限。请检查用户是否具有必要的权限,例如在执行特定的存储过程或创建表时。 4. 检查数据库参数设置。有时,ORA-01031误可以由数据库参数设置导致。特别是,你可能需要检查`REMOTE_LOGIN_PASSWORDFILE`参数的设置。如果该参数设置为NONE,连接到数据库时不会要求提供密码文件。但如果设置为EXCLUSIVE或SHARED,那么连接到数据库时需要提供正确的密码文件。 5. 运行`orapwd`命令重新创建密码文件。如果出现ORA-01031误,你可以尝试使用`orapwd`命令重新创建密码文件。这将确保存在正确的密码文件,并可能解决权限问题。 请根据具体情况尝试上述方法,并确保你具有足够的权限来执行所需的操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ora-01031禁止操作系统集成的身份验证方式](https://download.csdn.net/download/john_lewis/5196130)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [ORA-01031 :insufficient privileges](https://blog.csdn.net/weixin_36214833/article/details/117597432)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [执行sqlplus / as sysdbaORA-01031: insufficient privileges](https://blog.csdn.net/u014710633/article/details/122927908)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值