设为首页 收藏本站
查看: 640|回复: 0

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

[复制链接]
YunVN网友  发表于 2016-8-17 06:19:10 |阅读模式
在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 身份登录数据库实例时才会用到,现在情况是在本地数据库服务器上登录数据库实例。
 
(miki西游 @mikixiyou 原文链接: mikitp://mikixiyou.iyunv.com/blog/1584891)
 
再分析一下操作系统用户登录操作系统后再访问数据库实例的行为。
使用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 对该用户进行调整。如下所示:
 
[iyunv@mikitradedb1 ~]# usermod -G oinstall,dba -g oinstall oracle
[iyunv@mikitradedb1 ~]# id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall),503(dba)
 
 再次验证sysdba 身份登录操作,如下所示:
 
[iyunv@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 - 64bitProduction
With the Partitioning, OLAP, Data Mining and Real Application Testingoptions
 
结果显示已经是登录成功,问题就在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.iyunv.com/admin/blogs/1489090
根据分析内容,可以进一步判断问题所在。
 
本文主要参考资料为Oracle 的“TroubleshootingORA-1031: Insufficient Privileges While Connecting As SYSDBA [ID 730067.1] ”一文。
 
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-258687-1-1.html 上篇帖子: <转>oracle 查看用户所在的表空间 下篇帖子: 问题: Oracle Database 10g 未在当前操作系统中经过认证
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表