今天在管理oracle的时候发现一个很奇怪的问题,通过sqlplus sys/password as sydba 或者 sqlplus / as sysdba均可以登陆。
但通过sqlplus sys/password@sid as sysdba登录的时候报错,显示
ORA-01031: insufficient privileges
明明是sys用户,为什么会登录不上呢?
这个原因是密码文件错误或失败导致的。Oracle通过密码文件来管理sysdba的权限。如果被赋予了
Sysdba权限,正常情况下在密码文件里就有用户与密码的记录。
经查:Oracle有两种认证的方式:
- 与操作系统集成认证方式
- 使用密码文件认证
过程中有以下几个疑点:
- oracle 密码文件是做什么用的呢?
主要是进行DBA权限的身份验证。
- Oracle密码文件存储在什么位置呢?
$ORACLE_HOME/dbs/orapw$ORACLE_SID
- 根据什么判断是使用操作系统集成认证还是使用密码文件认证呢?
SQL> show parameter remote_login
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile string EXCLUSIVE
其中remote_login_passworldfile有以下几个值:
- shared
One or more databases can use the password file. The password file can contain SYS as well as non-SYS users.
一个或多个的数据库实例可以使用这个密码文件。内容含有sys和非sys用户
- exclusive
The password file can be used by only one database. The password file can contain SYS as well as non-SYS users.
密码文件只能被一个实例使用。内容含有sys和非sys用户
- none
Oracle ignores any password file. Therefore, privileged users must be authenticated by the operating system.
忽略任何密码文件。所以所有用户必须经过操作系统认证
经查数据库使用密码文件认证。那么需要重建密码文件。
orapwd file=$ORACLE_HOME/dbs/orapworcl password=password
提示已经有一个同名的文件
先删除orapwdorcl.ora 与orapwdorcl
rm orapwdorcl.ora
rm orapwdorcl
再执行
orapwd file=$ORACLE_HOME/dbs/orapworcl password=password
通过sqlplus sys/password@sid as sysdba登录还是提示
ORA-01031: insufficient privileges
Why?
经查执行orapwd命令缺少entries与force参数
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=password entries=5 force=y
再次登录,成功。
Ref:
https://aprakash.wordpress.com/2010/06/01/sys-as-sysdba-insufficient-privileges/
http://blog.csdn.net/leshami/article/details/5611672
来源:https://www.cnblogs.com/johnnyking/p/4244658.html