您的位置:首页 > 数据库 > Oracle

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

2013-04-16 20:40 316 查看
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的值以及密码文件是否存在决定了验证是否成功。 www.2cto.com
1. OS 验 证
要启用os验证,就必须在sqlnet.ora中设置SQLNET.AUTHENTICATION_SERVICES=(NTS),然后在Windows中建立ora_dba用户组,把相关用户加入到这个组中(e.g., administrator),这样administrator就可以在不用提供用户名和密码(或者提供任意的用户名和密码)的情况下以sysdba身份本地登陆。因为操作系统已经代替Oracle进行了验证。

测试一:服务器端登录
$ sqlplus / as sysdba
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the OLAP and Data Mining options
SQL>

SQL> sqlplus sys/change_on_install as sysdba
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the OLAP and Data Mining options
SQL>

测试二:windows客户端登录

先在windows客户端tnsnames.ora中配置了一个网络服务名1.163center
SQL:\>sqlplus sys/change_on_install@1.163center as sysdba
ERROR:
ORA-01031: insufficient privileges
Enter user-name: www.2cto.com

2. 密码文件验证

密码文件包含了被授予sysdba和sysoper权限的用户的用户名和密码。这是一个加密文件,一般来说存放在$ORACLE_HOME/dbs目录下,
文件名为orapwd_$ORACLE_SID。
如果要使用密码文件验证,则把sqlnet.ora改为SQLNET.AUTHENTICATION_SERVICES=none,或者从sqlnet.ora中删除SQLNET.AUTHENTICATION_SERVICES。同上匿名登陆sqlplus会失败,给出用户名和密码就可以成功登陆。

测试一:删除密码文件。使用用户名和密码登陆,失败!
SQL>sqlplus sys/change_on_install as sysdba
ERROR:
ORA-01031: insufficient privileges
Enter user-name:

测试二:恢复密码文件,设置REMOTE_LOGIN_PASSWORDFILE=none。使用用户名和密码登陆,失败!
SQL> alter system set remote_login_passwordfile=none scope=spfile;
System altered.

$sqlplus sys/change_on_install as sysdba
ERROR:
ORA-01017: invalid username/password; logon denied
Enter user-name:

测试三:恢复密码文件,设置REMOTE_LOGIN_PASSWORDFILE为EXCLUSIVE或者SHARED。使用用户名和密码登陆,成功!
SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;
System altered.

$sqlplus sys/change_on_install as sysdba
Connected to an idle instance.
SQL>
www.2cto.com
3. 密码文件

查看具有sysdba或者sysoper权限的用户:
SQL> select * from v$pwfile_users;

USERNAME SYSDB SYSOP
------------------------------ ------- -------
SYS TRUE TRUE

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

SQL> grant sysdba to logicgate;
Grant succeeded.

SQL> select * from v$pwfile_users;

USERNAME SYSDB SYSOP
------------------------------- -------- --------
SYS TRUE TRUE
LOGICGATE TRUE FALSE

使用orapwd命令可以重建密码文件。
$orapwd
Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n>
where
file - name of password file (mandatory),
password - password for SYS (mandatory),
entries - maximum number of distinct DBA (optional),
force - whether to overwrite existing file (optional)

其中文件名和密码是必需的。entries设置了密码文件可包含的dba用户的最大数目。force定义了是否覆盖当前文件。重建密码文件会清除系统内除了sys用户以外所有sysdba用户的密码。必须使用grant sysdba同步密码文件。
$orapwd file=$ORACLE_HOME/dbs/orapwd_$ORACLE_SID password=zdsoft entries=20 force=y;

$sqlplus sys/zdsoft as sysdba
Connected to: www.2cto.com
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the OLAP and Data Mining options

SQL> select * from v$pwfile_users;

USERNAME SYSDB SYSOP
------------------------------- -------- --------
SYS TRUE TRUE

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

from:http://www.2cto.com/database/201206/134682.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐