`
yuanlanjun
  • 浏览: 1185833 次
文章分类
社区版块
存档分类
最新评论

OEM以及oracle客户端中sys无法以sysdba登录解决案例

 
阅读更多

今早,公司某平台进行性能测试,出现了数据库连接用光,需要进行数据库访问瓶颈问题分析,在数据库服务器上顺利安装好了OEM,在window客户端进行OEM登录时候,通过sys帐号以sysdba角色权限登录,提示用户名或密码错误,直接到服务器上以conn sys/****** as sysdba连接成功,而另外一台服务器在客户单OEM通过sys以sysdba角色登录成功,通过分析确定,不能登录的那台服务器配置或者数据库方面的配置肯定存在问题,因为OEM是通过浏览器访问,本身客户端不需要设置的,下面是解决步骤思路:

Oracle的用户信息一般来说是保存在数据字典里的,所以常规用户在Oracle数据库没有启动的时候是无法登陆的。但有两类用户例外,这就是具有sysdba或者sysoper权限的用户。Oracle sysdba或者sysoper用户的登陆有两种方式:一是通过OS认证,二是通过密码文件验证。


究竟使用哪一种验证方式以及能否成功登陆取决于三个方面的因素:

1. sqlnet.ora中SQLNET.AUTHENTICATION_SERVICES的设置

2. 参数文件中REMOTE_LOGIN_PASSWORDFILE的设置

3. 密码文件orapwd_$ORACLE_SID

Oracle进行权限验证的大致顺序如下:

1. 根据SQLNET.AUTHENTICATION_SERVICES的值决定是进行os验证还是密码文件验证。

2. 如果是os验证,根据当前用户的用户组判断是否具有sysdba权限。如果os验证失败,则进行密码文件验证。

2. 如果是密码文件验证,REMOTE_LOGIN_PASSWORDFILE的值以及密码文件是否存在决定了验证是否成功。

1. OS验证

要启用os验证,就必须在sqlnet.ora中设置SQLNET.AUTHENTICATION_SERVICES=(NTS),然后在Windows中建立ora_dba用户组,把相关用户加入到这个组中(e.g., administrator),这样administrator就可以在不用提供用户名和密码(或者提供任意的用户名和密码)的情况下以sysdba身份本地登陆。因为操作系统已经代替Oracle进行了验证。

测试一:服务器端登录

  1. $ sqlplus / as sysdba
  2. Connectedto:
  3. OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Production
  4. WiththeOLAPandDataMiningoptions
  5. SQL>
  6. SQL>sqlplussys/change_on_installassysdba
  7. Connectedto:
  8. OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Production
  9. WiththeOLAPandDataMiningoptions
  10. SQL>

测试二:windows客户端登录

先在windows客户端tnsnames.ora中配置了一个网络服务名1.163center

  1. SQL:\>sqlplus sys/change_on_install@1.163center assysdba
  2. ERROR:
  3. ORA-01031:insufficientprivileges
  4. Enteruser-name:

2. 密码文件验证

密码文件包含了被授予sysdba和sysoper权限的用户的用户名和密码。这是一个加密文件,一般来说存放在$ORACLE_HOME/dbs目录下,

文件名为orapwd_$ORACLE_SID

如果要使用密码文件验证,则把sqlnet.ora改为SQLNET.AUTHENTICATION_SERVICES=none,或者从sqlnet.ora中删除SQLNET.AUTHENTICATION_SERVICES。同上匿名登陆sqlplus会失败,给出用户名和密码就可以成功登陆。


测试一:删除密码文件。使用用户名和密码登陆,失败!

  1. SQL>sqlplussys/change_on_installassysdba
  2. ERROR:
  3. ORA-01031:insufficientprivileges
  4. Enteruser-name:

测试二:恢复密码文件,设置REMOTE_LOGIN_PASSWORDFILE=none。使用用户名和密码登陆,失败!

  1. SQL>altersystemsetremote_login_passwordfile=nonescope=spfile;
  2. Systemaltered.
  3. $sqlplussys/change_on_installassysdba
  4. ERROR:
  5. ORA-01017:invalidusername/password;logondenied
  6. Enteruser-name:

测试三:恢复密码文件,设置REMOTE_LOGIN_PASSWORDFILE为EXCLUSIVE或者SHARED。使用用户名和密码登陆,成功!

  1. SQL>altersystemsetremote_login_passwordfile=exclusivescope=spfile;
  2. Systemaltered.
  3. $sqlplussys/change_on_installassysdba
  4. Connectedtoanidleinstance.
  5. SQL>

3. 密码文件

查看具有sysdba或者sysoper权限的用户:

  1. SQL>select*fromv$pwfile_users;
  2. USERNAMESYSDBSYSOP
  3. --------------------------------------------
  4. SYSTRUETRUE

每次使用grant sysdba/sysoper授予新用户特殊权限或是alter user命令修改拥有sysdba/sysoper权限的用户密码的时候,Oracle都会自动的同步密码文件,这样保证在数据库没有打开的情况拥有特殊权限的用户能正常的登陆数据库以进行管理操作。

  1. SQL>grantsysdbatologicgate;
  2. Grantsucceeded.
  3. SQL>select*fromv$pwfile_users;
  4. USERNAMESYSDBSYSOP
  5. -----------------------------------------------
  6. SYSTRUETRUE
  7. LOGICGATETRUEFALSE

使用orapwd命令可以重建密码文件。

  1. $orapwd
  2. Usage:orapwdfile=<fname>password=<password>entries=<users>force=<y/n>
  3. where
  4. file-nameofpasswordfile(mandatory),
  5. password-passwordforSYS(mandatory),
  6. entries-maximumnumberofdistinctDBA(optional),
  7. force-whethertooverwriteexistingfile(optional)

其中文件名和密码是必需的。entries设置了密码文件可包含的dba用户的最大数目。force定义了是否覆盖当前文件。重建密码文件会清除系统内除了sys用户以外所有sysdba用户的密码。必须使用grant sysdba同步密码文件。

  1. $orapwdfile=$ORACLE_HOME/dbs/orapwd_$ORACLE_SIDpassword=zdsoft entries=20force=y;
  2. $sqlplussys/zdsoft assysdba
  3. Connectedto:
  4. OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Production
  5. WiththeOLAPandDataMiningoptions
  6. SQL>select*fromv$pwfile_users;
  7. USERNAMESYSDBSYSOP
  8. -----------------------------------------------
  9. SYSTRUETRUE

通过以上三个步骤配置:sqlnet.ora,重建密码文件,设置REMOTE_LOGIN_PASSWORDFILE =exclusive后,windows客户端通过网络服务名sys以sysdba角色可以登录数据库服务器,同时OEM本来只能通过sysman以normal身份登录变成sys可以sysdba登录

分享到:
评论

相关推荐

    Oracle用sysdba登录问题

    Oracle数据库用sysdba登录的时候,不需要提供用户名/密码,或者输入不存在的用户名/密码,也能成功,原因是采用了OS验证方式。

    Sys和system用户、sysdba 和sysoper系统权限、dba角色的区别

    【sys】 所有oracle的数据字典的基表和视图都存放在sys用户中,这些基表和视图对于oracle的运行是至关重要的,由数据库自己维护,任何用户都不能手动更改。sys用户拥有dba,sysdba,sysoper等角色或权限,是oracle...

    oracle登录报错案例分析

    oracle登录报错案例。很有用的,比较简单。

    oracle sysdba 密码解释

    oracle sysdba 密码解释,讲述oracle sysdba的密码机制,以及如何恢复,等操作。

    Oracle 10g安装前的准备、卸载、sqlplus as sysdba登录Oracle10 g配置

    1、Oracle 10g的完美安装,明白清楚的图解(且附:解释) 2、Oracle 10g的完全卸载 3、以sqlplus as sysdba(浏览器)登录Oracle数据库 执行sql*iplus 操作

    Oracle中sys和system的区别小结

    是Oracle数据库中权限最高的帐号 SYSTEM具有DBA权限。但没有SYSDBA权限。平常一般用该帐号管理数据库就可以了。 2. (1)sys — sysdba system –sysoper (2)startup/shutdown/dba管理两个都能做 (3)sys拥有数据...

    oracle12c ORA-01017: 用户名/口令无效; 登录被拒绝 解决方案

    oracle12c程序连接时异常: ORA-01017: 用户名/口令无效; 登录被拒绝 的解决方案。

    oracle用户区分

    oracle sys scott hr sysdba sysman sysopt用户区分

    Oracle数据库的启动和关闭

    一般我们常用INTERNAL用户来启动和关闭数据库(INTERNAL用户实际上 是SYS用户以SYSDBA连接的同义词)。Oracle数据库的新版本将逐步淘汰INTERNAL这个内部用户,所以我们最好还是设置DBA用户具有 SYSDBA权限。

    sys用户与system用户.txt

    【sys】所有 oracle 的数据字典的基表和视图都存放在 sys 用户中,这些基表和视图对于 oracle 的运行是至关重要的,由数据库自己维护,任何用户都不能手动更改。 sys 用户拥有 dba , sysdba , sysoper 等角色或...

    解决12c兼容11g问题

    Oracle 12c 创建建WMSYS用户的WMSYS.WM_CONCAT函数 解决12c不支持WM_CONCAT函数问题 解压到E:\WMSYS\目录下然后在cmd里执行下边的命令 sqlplus / as sysdba @E:\WMSYS\owmctab.plb; @E:\WMSYS\owmaggrs.plb; @...

    浅析Oracle中sys、system和Scott用户下的数据库连接问题

    system默认:manager sys默认:change_on_install 使用SQL Plus登录数据库时,system使用密码manager可直接登录。 ... 代码示例: conn system ... conn sys/change_on_install as sysdba conn 用户sys/密码 连接s

    ORACLE常用傻瓜问题

    oracle中的裸设备指的是什么?  裸设备就是绕过文件系统直接访问的储存空间  7. oracle如何区分 64-bit/32bit 版本???  $ sqlplus '/ AS SYSDBA' SQL*Plus: Release 9.0.1.0.0 - Production on Mon ...

    oracle用户权限

    解决PL-sql里面system只能以sysdba身份登录,不能以normal身份登录

    ORA-00119 和 ORA-00132 解决记录(win 8 升级 win 10 后,oracle 11g 无法启动及客户端连接)

    win 8 升级 win 10 后,oracle 11g 无法启动及客户端连接,命令行sqlplus登录,startup 时报 ORA-00119 和 ORA-00132 的错误。 1. sqlplus /nolog 2. conn / as sysdba 3. startup 报错: ORA-00119 和 ORA-00132

    Oracle 教程 Oracle Server

    每个 Oracle数据库对应唯一的一个实例名SID,Oracle数据库服务器启动后,一般至少有以下几个用户:Internal,它不是一个真实的用户名,而是具有SYSDBA优先级的Sys用户的别名,它由DBA用户使用来完成数据库的管理任务...

    oracle忘记sys/system/scott用户密码的解决方法

     CONN SYS/PASS_WORD AS SYSDBA;  使用如下语句修改用户的密码。  ALTER USER user_name IDENTIFIED BY newpass; 注意:密码不能全是数字。并且不能是数字开头。否则会出现:ORA-00988: 口令缺失或无效 二、忘记...

    oracle数据库导入导出命令

    oracle数据库常用到的导入导出命令,txt文档,相当方便、实用。

    利用python-oracledb库连接Oracledb数据库,使用示例

    python-oracledb的源码和使用示例代码, python-oracledb 1.0,适用于Python versions 3.6 through 3.10. Oracle Database; This directory contains samples for python-oracledb. 1. The schemas and SQL ...

Global site tag (gtag.js) - Google Analytics