问题一:SYSDBA不能远程登录(此处是不是指CRT远程登录)

SYSDBA不能远程登录分两种情况:
第一种:

  1. C:\Users\kerry>sqlplus "sys/wgods123@gsp as sysdba"
  2. SQL*Plus: Release 11.2.0.1.0 Production on 星期五 1 11 11:08:07 2013
  3. Copyright (c) 1982, 2010, Oracle. All rights reserved.
  4. ERROR:
  5. ORA-01017: invalid username/password; logon denied

明明密码和用户名明明输入的都是正确的。这又是为什么叻,出现这种情况,一般是系统参数REMOTE_LOGIN_PASSWORD的设置问题:PFILE文件中有个参数REMOTE_LOGIN_PASSWORD 对passwordfile进行控制:

  • remote_login_passwordfile =NONE时,停用口令文件验证,Oracle数据库不允许远程SYSDBA/SYSOPER身份登录,无法通过远程进行数据库起停等操作管理;
  • remote_login_passwordfile =exclusive时,启用口令文件,允许远程登录;
  • remote_login_passwordfile =shared 时,多个数据库可以共享一个口令文件,但是只可以识别一个用户:SYS;

当口令文件丢失时,用/NOLOG方式登录,通过orapwd重建口令文件来解决。如果口令文件丢失,可以使用orapwd可以重建口令文件。

这里需要启动密码文件的话,需要前提就是这个值, 这里的值可以NONE,EXCLUSIVE和SHARE。EXCLUSIVE和SHARE都可以,EXCLUSIVE是独占的文件,SHARE是多实例的体系中的共享模式。这个问题基本上就是这个值导致的

  1. SQL>alter system set remote_login_passwordfile=EXCLUSIVE scope=spfile;

第二种:ORA-01031: insufficient privileges

  1. C:\Users\kerry>sqlplus "sys/wgods123@GSP as sysdba"
  2. SQL*Plus: Release 11.2.0.1.0 Production on 星期五 1 11 14:37:11 2013
  3. Copyright (c) 1982, 2010, Oracle. All rights reserved.
  4. ERROR:
  5. ORA-01031: insufficient privileges

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

如何解决了。我们首先来判断一下

  1. SELECT * FROM V$PWFILE_USERS;

如果这里选择不出了记录的话,就是密码文件没有创建或丢失。

密码文件的位置
  1. Linux下的存放位置:$ORACLE_HOME/dbs/orapw$ORACLE_SID
  2. 即:ORACLE_HOME/dbs/orapw<sid>
  3. Windows下的存放位置:$ORACLE_HOME/database/PWD%ORACLE_SID%.ora
密码文件查找的顺序
  1. --->orapw<sid>--->orapw--->Failure
两种认证方式:类似于SQL server中的windows认证和SQL server认证

决定在两个参数中

1.remote_login_passwordfile = none | exclusive |shared 位于$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora参数文件中

  1. none : 不使用密码文件认证
  2. exclusive :要密码文件认证,自己独占使用(默认值)
  3. shared :要密码文件认证,不同实例dba用户可以共享密码文件
  1. $ORACLE_HOME/network/admin/sqlnet.ora

    SQLNET.AUTHENTICATION_SERVICES = none | all | ntf(windows)

    none : 表示关闭操作系统认证,只能密码认证

    all : 用于linux或unix平台,关闭本机密码文件认证,采用操作系统认证,但远程<异机>可以使用密码文件认证

    nts : 用于windows平台

使用密码文件orapwd 命令创建

  1. [oracle@wgods dbs]$ orapwd file=/database/oracle/product/dbhome/dbs/orapwjetair entries=4 password=wgods123 force=y
文档更新时间: 2020-12-02 17:35   作者:张尚