windows平台下的oracle ORA-01031的解决方法

windows平台下的oracle ORA-01031的解决方法

今天下午遇到一个很怪异的问题,在windows平台下sqlplus / as sysdba登陆数据库,提示权限不足,
windows平台下的oracle ORA-01031的解决方法_第1张图片

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

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

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

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

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

好,那就先看sqlnet.ora

windows平台下的oracle ORA-01031的解决方法_第2张图片可以看到该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,

不查不知道,一查吓一跳,我当前以administrator用户登陆,但是没有将其加入到ORA_DBA组里,原因找到

将administrator用户加入到ORA_DBA组里

具体流程如下:

①找到如下图的工具

windows平台下的oracle ORA-01031的解决方法_第3张图片

②右键如下图红色框框中选项,选择添加或者删除选项

windows平台下的oracle ORA-01031的解决方法_第4张图片

③右键如下图,选择添加或者删除选项

windows平台下的oracle ORA-01031的解决方法_第5张图片

如下图这是添加之后的截图

windows平台下的oracle ORA-01031的解决方法_第6张图片

再登陆数据库:sqlplus   / as sysdba

windows平台下的oracle ORA-01031的解决方法_第7张图片

ok,问题解决!
写到这我只想跟大家说一句,自给自足,解决问题的能力太重要了。一起共勉!!!

你可能感兴趣的:(Oracle学习)