windows上 ORA-01031的解决办法

运维DBA反映在Windows环境的Oracle数据库,在执行sqlplus / as sysdba本地权限登录数据库时报错ORA-01031

测试环境win平台的oracle不能在本地使用sqlplus / as sysdba登录数据库,提示ora-01031的错误

01031, 00000, "insufficient privileges"
// *Cause: An attempt was made to change the current username or password
// ? ? ? ? without the appropriate privilege. This error also occurs if
// ? ? ? ? attempting to install a database without the necessary operating
// ? ? ? ? system privileges.
// ? ? ? ? When Trusted Oracle is configure in DBMS MAC, this error may occur
// ? ? ? ? if the user was granted the necessary privilege at a higher label
// ? ? ? ? than the current login.
// *Action: Ask the database administrator to perform the operation or grant
// ? ? ? ? ?the required privileges.
// ? ? ? ? ?For Trusted Oracle users getting this error although granted the
// ? ? ? ? ?the appropriate privilege at a higher label, ask the database
// ? ? ? ? ?administrator to regrant the privilege at the appropriate label.

ORA-01031的解决办法

根据这个错误提示,我的第一反应就是当前的用户不属于ora_dba用户组,
通过计算机管理–>本地用户和组–>administrator用户属性–>隶属于中只有一个administrators,果然没有ora_dba组


接下来的事情,就是添加ora_dba组到administrator用户中
点击刚刚隶属于下面的添加–>高级–>立即查找–选择ora_dba–点击确定–>再点击选择组中的确定–>点击用户属性的确定


添加把ora_dba添加到administrator用户所属组中,再尝试登录

ok,登录成功了,看来在win系统中,要想使用sqlplus / as sysdba 登录数据库,必须要隶属于ora_dba组,就算administrators组也不能越俎代庖。
 
=======================================================================================================================
 
资料二:

 "历史总是上演惊人的相似", 在技术开发过程中,你也会总会碰到惊人相似的问题,这段时间我就碰到了”ORA-01031:insufficient privileges  权限不足”这个错误多次,一次是自己,一次是同事碰到的,顺便整理了下这个知识点。

情况一:

如果数据库实例安装在服务器A上,你用管理员权限Administrator登录后,使用SQL> conn system/manage as sysdba登录 没有问题。但是如果你在服务器A上建立一个etl账号,使它率属于Remote Desktop Users 和Users 组,如下所示:

此时你用sys账号登录数据库时,就会报ORA-01031:insufficient privileges错误,退出etl账号,用管理员登录给etl账号赋予率属于Oracle DBA Group的权限

然后用etl账号登录,问题解决了,如果你赋予etl账号管理员组权限,但是没有ora_dba权限,如下所示, 结果会怎样?答案是依然会报权限不足的错误

 

情况二:此时我在远程机器B上,我使用sys账号远程登录时报ORA-01031:insufficient privileges或ORA-01017: invalid username/password; logon denied错误。

首先去检查下sqlnet.ora文件下是否有SQLNET.AUTHENTICATION_SERVICES= (NTS)设置,如何已经配置了这个选项。那么我们接下来检查下一下密码文件参数

很明显密码文件存在,如果查询没有记录,则说明密码文件不存在,需要重建密码文件,有时候我们确实是sysdba的权限,为什么登录却提示你的权限不够叻?这里的问题可能出现在密码文件里,由于你的密码文件缺损或者不存在,而ORALCE实例对sysdba的权限是根据这个密码文件来判断的,为什么这样做呢?如果我们的数据库没有OPEN,那么对于的一些动态视图是不能打开的,所以ORACLE必须把这些用户的口令和USERNAME放在一个独立的文件里,这样在数据库还不是OPEN的状况写,有个地方判断了。使用orapwd命令重建密码文件。orapwd命令的用法如下。

接下来查看系统参数remote_login_passwordfile

如果VALUE值不是EXCLUSIVE,那么需要设置参数remote_login_passwordfile的值为EXCLUSIVE,有一次我检查配置了上述所有配置后,发现都符合,在远程用SQL*PLUS登录后,居然报如下错误

ORA-01017: invalid username/password; logon denied错误,很是纳闷,仔细检查了所有配置后,最后发现居然是服务器B的Guest账号被禁用了(如下所示)


启用了Guest账号,然后在机器A上用sys账号登录,此时又报ORA-01031: insufficient privileges,赶紧给Guest账号添加ora_dba用户组,问题解决了。

 

 

你可能感兴趣的:(windows上 ORA-01031的解决办法)