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
————————————————————————————————————