oracle10g中的sys用户的验证方式

今天下午用手工写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

能够连上!

C:\Documents and Settings\Administrator>set oracle_sid=demo
C:\Documents and Settings\Administrator>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 8月 10 17:28:21 2010
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
SQL> conn / as sysdba
已连接。
SQL> show parameter db_name
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_name                              string      demo

 

但是在远程电脑上,用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是否属于该组。

C:\WINDOWS\system32>net localgroup ora_dba
别名     ora_dba
注释
成员
--------------------------------------------------------------
Administrator
NT AUTHORITY\SYSTEM
sa
命令成功完成。
 

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

C:\WINDOWS\system32>set oracle_sid=demo
C:\WINDOWS\system32>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 8月 10 17:47:02 2010
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
SQL> conn sys/dbaaa as sysdba
已连接。
SQL> conn / as sysdba
已连接。
SQL> conn sys as sysdba
输入口令:
已连接。
SQL> show parameter db_name
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_name                              string      demo
SQL>

 

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

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

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

C:\WINDOWS\system32>set oracle_sid=demo
C:\WINDOWS\system32>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 8月 10 17:53:58 2010
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
SQL> conn / as sysdba
ERROR:
ORA-01031: insufficient privileges
SQL> conn sys/db as sysdba
已连接。
SQL> conn sys/dbaa as sysdba
ERROR:
ORA-01031: insufficient privileges

 

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

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

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

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

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

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

————————————————————————————————————
——— 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
——— 转载务必注明原始出处 : http://www.dbainfo.net
——— 关键字:oracle sysdba sysoper验证 os password file authentication
————————————————————————————————————

  • 本文链接地址:http://www.sybrepair.com/oracle10g-authentication-local-os-sys-user.htm
  • 本文为dbainfo个人原创,请在尊重作者劳动成果的前提下进行转载;
  • 转载务必注明原始出处 : Sybase数据库技术,数据库恢复专家
  • 对《oracle10g中的sys用户的验证方式》有何疑问或见解,请在本文下方发表;
  • 对网站还有其他问题或建议,请提交在留言板,谢谢!
  • 目前还没有任何评论.
    :wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)