今天下午遇到一个很怪异的问题,在windows平台下sqlplus / as sysdba登录数据库,提示权限不足,linux
当时就纳闷了,sys用户登录数据库还能权限不足,问题出现了,就开始寻找解决方法呗sql
首先查看$ORACLE_HOME/network/admin/sqlnet.ora中SQLNET.AUTHENTICATION_SERVICES项的配置信息,数据库
网上的大多数帖子一致结论为:windows
在windows平台上,SQLNET.AUTHENTICATION_SERVICES必须设置为NTS或者ALL才能使用操做系统验证,不设置或者设置为其余都能使用操做系统验证oracle
在linux平台上,SQLNET.AUTHENTICATION_SERVICES必须设置为ALL或者不设才能使用操做系统验证,设置为其余则不能使用操做系统验证ide
好,那就先看sqlnet.ora操作系统
个人SQLNET.AUTHENTICATION_SERVICES是NTS啊,那又是什么缘由呢,再找unix
再分析一下操做系统用户登陆操做系统后再访问数据库实例的行为。 blog
使用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,
坏了,我当前以administrator用户登录,可是没有将其加入到ORA_DBA组里,缘由找到
将administrator用户加入到ORA_DBA组里
再登录数据库:sqlplus / as sysdba
ok,问题解决!