今天下午遇到一个很怪异的问题,在windows平台下sqlplus  / as sysdba登陆数据库,提示权限不足,

164945268.jpg

当时就纳闷了,sys用户登陆数据库还能权限不足,问题出现了,就开始寻找解决方法呗

首先查看$ORACLE_HOME/network/admin/sqlnet.ora中SQLNET.AUTHENTICATION_SERVICES项的配置信息,

网上的大多数帖子一致结论为:

        在windows平台上,SQLNET.AUTHENTICATION_SERVICES必须设置为NTS或者ALL才能使用操作系统验证,不设置或者设置为其他都能使用操作系统验证

        在linux平台上,SQLNET.AUTHENTICATION_SERVICES必须设置为ALL或者不设才能使用操作系统验证,设置为其他则不能使用操作系统验证

    好,那就先看sqlnet.ora

172254783.jpg

        我的SQLNET.AUTHENTICATION_SERVICES是NTS啊,那又是什么原因呢,再找

 

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

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

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

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

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

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

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

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


再看看,当前登录用户有没有加入到ORA_DBA,

174137416.jpg

坏了,我当前以administrator用户登陆,但是没有将其加入到ORA_DBA组里,原因找到

    将administrator用户加入到ORA_DBA组里

174430487.jpg

    再登陆数据库:sqlplus   / as sysdba

174558126.jpg

        ok,问题解决!