conn / as sysdba 出现ORA-01031: insufficient privileges 解决办法

sysdba不能远程登录这个也是一个很常见的问题了。 

碰到这样的问题我们该如何解决呢?


我们用sysdba登录的时候,用来管理我们的数据库实例,特别是有时候,服务器不再本台机器,这个就更是有必要了。 

当我们用sqlplus "/ as sysdba" 
是可以登录的。 

但是我们如果用sqlplus "sys/password@tnsname as sysbda"这样的方式去不能登录. 

这里我们的错误一般分为两类 
第一类: 提示ORA-01031: insufficient privileges(权限不足)  
引用:

sqlplus "sys/password as sysdba" 
ERROR:
ORA-01031: insufficient privileges

或者

sqlplus /nolog

conn / as sysdba 
ERROR:
ORA-01031: insufficient privileges



如果是这样的错误,你明明是用这个sys登录的,而且确实是sysdba的权限,为什么登录却提示你的权限不够叻。 
这里的问题出现在密码文件里,由于你的密码文件缺损或者不存在,而Oracle实例对sysdba的权限是根据这个 
密码文件来判断的,如果你的用户被grant to sysdba了,那么这个用户的密码和用户名也在这个密码文件了。 
这样也就发现你不是sysdba的角色,当然as sysdba就会提示权限不足了哟。 
为什么这样做了,如果我们的数据库没有open,那么对于的一些动态视图是不能打开的,所以oracle必须把这些 
用户的口令和username放在一个独立的文件里,这样在数据库还不是open的状况写,有个地方判断了。 

如何解决了。我们首先来判断一下 
执行sql 
SQL> select * from v$pwfile_users; 
USERNAME SYSDB SYSOP 
------------------------------ ----- ----- 
SYS TRUE TRUE 

如果这里选择不出了记录的话,就是密码文件没有叻。 

这里解决的方法就是重建orapwd文件 
使用密码文件orapwd 命令
 
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=gelc123 entries=5
force=y
 
再次查看 v$pwfile_users 这时候有一条记录了 

现在再试试,我们的问题基本上就解决了 

还有一种情况,提示的是ORA-01017:用户名密码出错  
ERROR:
ORA-01017: invalid username/password; logon denied

这样的错误,可是你的密码和用户名明明输入的都是正确的。这又是为什么叻 
检查一下系统参数remote_login_passwordfile的值, 
这里需要启动密码文件的话,需要前提就是这个值, 这里的值可以NONE,EXCLUSIVE和SHARE 
EXCLUSIVE和SHARE都可以,EXCLUSIVE是独占的文件,SHARE是多实例的体系中的共享模式 
这个问题基本上就是这个值导致的 
SQL>alter system set remote_login_passwordfile=EXCLUSIVE scope=spfile; 

现在重启服务试试看。 

已经OK解决了吧
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
当使用Oracle数据库时,连接到数据库时可能会遇到"ORA01031: insufficient privileges"错误。这个错误表示当前用户没有足够的权限来执行所请求的操作。 "conn / as sysdba"是一种特殊的连接方式,它允许以超级用户(SYSDBA角色)的身份连接到Oracle数据库。SYSDBA角色具有最高级别的权限,可以执行任何数据库操作。 当你使用"conn / as sysdba"连接到数据库时,你需要确保你的操作系统用户具有足够的权限来执行这个操作。在Unix/Linux系统上,你需要以Oracle软件所有者的身份运行该命令。在Windows系统上,你需要以管理员身份运行命令提示符或PowerShell窗口,并使用正确的环境变量设置。 如果你遇到"ORA-01031: insufficient privileges"错误,可能有以下几个原因: 1. 操作系统用户没有足够的权限来执行"conn / as sysdba"命令。 2. 数据库用户没有被授予SYSDBA角色。 3. 数据库用户没有被授予足够的权限来执行所请求的操作。 为了解决这个问题,你可以尝试以下几个步骤: 1. 确保你以正确的操作系统用户身份运行"conn / as sysdba"命令。 2. 确保数据库用户被授予SYSDBA角色。你可以使用以下命令检查: ``` SELECT * FROM dba_role_privs WHERE granted_role = 'SYSDBA' AND grantee = '<your_username>'; ``` 如果没有结果返回,你可以使用以下命令将用户添加到SYSDBA角色: ``` ALTER USER <your_username> GRANT SYSDBA; ``` 3. 如果你需要执行特定的操作,确保数据库用户被授予执行该操作所需的权限。你可以使用GRANT语句为用户授予所需的权限。 希望以上信息对你有帮助!如果你还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值