oracle10g中的sys用户的验证方式

来源:互联网 发布:淘宝客跳转代码 编辑:程序博客网 时间:2024/04/29 23:58

---------------------------------------------------------------------------

---- 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;

---- 转载务必注明原始出: http://blog.csdn.net/andkylee

--- 2010-08-1018:19:57

---- 关键字: oracle sysdba sysoper验证 os password file authentication

----------------------------------------------------------------------------

今天下午用手工写create database命令的方式创建了一个测试库demo,执行了catalog.sql,catproc.sql,pupbld.sql这三个脚本后,也用orapwd工具创建了密码文件:

orapwd file=e:/oracle/db_1/database/orapwdemo.ora password=db entries=10

 

因为那台机器上原本有一个oracle实例在跑,所以就没有改listener.ora文件的内容。

在测试库demo的本机上连接实例demo的时候,没有问题。

set oracle_sid=demo

sqlplus /nolog

conn / as sysdba

能够连上!

 

但是在远程电脑上,用system用户可以连接,用sys连接的时候报错:

SQL> conn sys/db@demo178 as sysdba
ERROR:
ORA-01031: insufficient privileges

 

解决办法:

 

最后问题出在密码文件的名称上。oracle 9i的时候密码文件以orapw开头,但是在oracle10g中以pwd开头。所以,到测试实例demo所在机器上,将e:/oracle/db_1/database/下的密码文件orapwdemo.ora名称改为:pwddemo.ora。问题即可解决!

另外,将其他的密码文件,按照pwd$oracle_sid.ora改名后即可使用。不过,你要是事先知道密码文件的密码。(这种方式可以省去用orapwd创建密码文件的过程,呵呵!)

 

通过以上的错误,可以看出:oracle在使用密码文件对sys用户进行登录验证的时候,会到$ORACLE_HOME/dbs/目录下面找pwd$oracle_sid.ora这个文件。如果找个该文件,则再检查密码是否正确;否则,就不能验证sys的有效性,也就报没有足够权限的错误。

 

总结:

有必要回顾一下,oracle中的sys登录用户的验证方式。在oracle数据库实例所在的本机上,当用sys用户登录的时候,会首先选用操作系统验证模式,如果当前操作系统的登录用户属于组dba(windows上位ora_dba),那么验证成功;否则,才会使用密码验证模式。

 

在本地系统使用操作系统级别验证sys登录

下面演示一下,用telnet上一台装有oracle10g实例名为demo的windows机器。使用的操作系统登录名为:sa,此用户属于ora_dba组。实例demo的sys用户的密码为:db。

在telnet下执行:net localgroup ora_dba 查看当前的登录用户sa是否属于该组。

可见,sa属于oracle的ora_dba组。所以,在用sys连接数据库的时候,oracle会优先使用操作系统级别的验证。

 

 

在本地系统使用密码文件来验证sys登录

 

以另外一个用户user作为登录telnet到oracle实例所在机器。user这个用户不属于ora_dba组。

执行:net user user 可以查看该用户所属的本地组。

 

 

可以不属于组ora_dba时,只能使用密码文件进行验证。

 

 

在远程系统使用操作系统级别验证sys登录

此种方法需要在远程系统上的“本地net服务名配置”中使用安全的tcp(即:tcps)网络协议。不过,暂时还没学会怎么用。可能用这种方法的人比较少吧。

 

在远程系统使用密码文件来验证sys登录

 

很好理解,在远程系统上的“本地net服务名配置”中使用安全的tcp(不安全的tcp协议)网络协议时,会使用密码文件验证。

 

下面的图片很直观的介绍了sys用户的验证方式:

 

 

 

 

 

原创粉丝点击