以sysdba身份登录oracle报ORA-1031权限不足错误之完美分析

在linux 操作系统的数据库服务器上,使用”sqlplus / as sysdba” 登录Oracle 10.2 数据库实例时,登录失败,显示ORA-01031:  权限不足。

在数据库所在服务器上登录的操作,使用的是操作系统认证方式登录数据库实例。在出现“ORA-01031 “ 的错误错误时,首先去检查sqlnet.ora 文件中SQLNET.AUTHENTICATION_SERVICES 项的配置信息。这种分析是被很多人推荐,在互联网上也有很多帖子都提及到。

大致得到的结论是:

1 、在windows 下,SQLNET.AUTHENTICATION_SERVICES 必须设置为NTS 或者ALL 才能使用OS 认证;不设置或者设置为其他任何值都不能使用OS 认证。

2 、在linux 下,在SQLNET.AUTHENTICATION_SERVICES 的值设置为ALL ,或者不设置的情况下,OS 验证才能成功;设置为其他任何值都不能使用OS 认证。

首先肯定一点,这种分析方法是没有错的。我在碰到这种问题时,首先去分析的也是这个文件的配置。

但在本案例中,sqlnet.ora 文件的内容如下:

 

  [oracle@mikitradedb1 ~]$ more /u01/app/oracle/product/10.0.2/db_1/network/admin/sqlnet.ora

# sqlnet.ora Network Configuration File: /u01/app/oracle/product/10.0.2/db_1/network/admin/sqlnet.ora

# Generated by Oracle configuration tools.

 

NAMES.DIRECTORY_PATH= (TNSNAMES)

 

你会不会认为,还要坚持实例的初始化参数remote_login_passwordfile ,还有密码文件。而这两点是在异地服务器上使用sysdba 身份登录数据库实例时才会用到,现在情况是在本地数据库服务器上登录数据库实例。

 

再分析一下操作系统用户登录操作系统后再访问数据库实例的行为。

使用sysdba 身份连接数据库实例,使用的认证方式是操作系统认证,而这一认证操作过程是操作系统根据它管理的信息去校验该用户是否可以连接数据库的过程。

因此,需要进一步分析的是,操作系统如果判断oracle 用户符合认证条件。很显然,我们这里的oracle 用户的权限被操作系统或者oracle 系统拒绝了。

Oracle 认为,需要满足下列条件的用户才能使用系统认证方式连接数据库实例。

1 、系统用户oracle 必须属于一个特定的组

该用户必须属于OSDBA 组才能以sysdba 身份登录。这里的OSDBA 组在不同类型的操作系统上,名称会不一样。在unix 系统上名称为“dba ” ,而在windows 系统上名称则为“ORA_DBA ” 。

2 、 sqlnet.authentication_services 的参数必须设置正确

在unix 系统上,该参数值必须设置为ALL ,或者不设置;在windows 上,它必须设置为NTS 。  

 

我们回到环境中去检查系统用户oracle 的所属组的情况。

 

[oracle@mikitradedb1 ~]$ id oracle

uid=501(oracle) gid=501(oinstall) groups=501(oinstall)

 

发现该用户只属于oinstall ,而没有dba 。

因此,我们在root 环境下使用usermod 对该用户进行调整。如下所示:

 

[root@mikitradedb1 ~]# usermod -G oinstall,dba -g oinstall oracle

[root@mikitradedb1 ~]# id oracle

uid=501(oracle) gid=501(oinstall) groups=501(oinstall),503(dba)

 

  再次验证sysdba 身份登录操作,如下所示:

 

[root@mikitradedb1 ~]# su - oracle

[oracle@mikitradedb1 ~]$ sqlplus / as sysdba

 

SQL*Plus: Release 10.2.0.4.0 - Production on Wed Jul 11 09:47:50 2012

 

Copyrigmiki (c) 1982, 2007, Oracle.   All Rigmikis Reserved.

 

 

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

结果显示已经是登录成功,问题就在oracle 用户没有在dba 组中。

 

总而言之,在本地以sysdba 身份登录数据库实例时,碰到ORA-01031 权限不足的错误,需要系统用户所在的组是否有dba 和sqlnet.ora 文件中sqlnet.authentication_services 是否配置正确。

如果还有问题,还有一种方法可以继续分析。使用操作系统分析工具对sqlplus 应用进行分析。

 

Linux: 
strace -o /tmp/strace_sysdba.output -cfT sqlplus / as sysdba

 

AIX, Solaris: 
truss -fea -o /tmp/truss_sysdba.output sqlplus / as sysdba

 

HP-UX: 
tusc -afpo /tmp/tusc_sysdba.output -aef sqlplus / as sysdba

 

分析工具使用方法可以参考mikitp://mikixiyou.iteye.com/admin/blogs/1489090

根据分析内容,可以进一步判断问题所在。

 

本文主要参考资料为Oracle 的“Troubleshooting ORA-1031: Insufficient Privileges While Connecting As SYSDBA [ID 730067.1] ” 一文。



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

转自 miki 西游 @mikixiyou

原文链接: mikitp://mikixiyou.iteye.com/blog/1584891 )






  • 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、付费专栏及课程。

余额充值