出处: http://yangtingkun.itpub.net/post/468/482002
---------------------------------------------------------------
Oracle的ORAPWD工具用来创建密码文件。
拥有SYSDBA和SYSOPER权限的用户,可以执行类似CREATE DATABASE、DROP DATABASE、RECOVER、STARTUP、SHUTDOWN之类的操作。这两个权限不但很高,而且很特殊。因为这些用户不能通过数据库进行验证。当数据库关闭后,如果一个拥有SYSDBA权限的用户要启动数据库,那么这个用户的验证肯定要放在数据库之外。
因此Oracle提高了操作系统验证和密码文件验证两种方式。而ORAPWD正是Oracle用来生成密码文件的工具。
密码文件一般放在ORACLE_HOME/dbs目录下,对于WINDOWS环境,则是ORACLE_HOMEdatabase目录。文件名称为orapw + $ORACLE_SID。
这个命令很简单:
$ orapwd -h
Usage: orapwd file=<fname> password=<password> entries=<users>
where
file - name of password file (mand),
password - password for SYS (mand),
entries - maximum number of distinct DBA and OPERs (opt),
There are no spaces around the equal-to (=) character.
创建密码文件可以重新设置SYS用户的密码:
$ sqlplus /nolog
SQL*Plus: Release 9.2.0.4.0 - Production on 星期五 4月 10 01:44:03 2009
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> conn sys/abc@bjtest as sysdba
ERROR:
ORA-01017: invalid username/password; logon denied
SQL> conn sys/test@bjtest as sysdba已连接。
SQL> exit从Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production中断开
可以看到指定bjtest服务名的时候,是没有使用操作系统验证的,可以看到目前SYS用户的密码是TEST。
下面通过ORAPWD工具新建一个密码文件,指定一个新的密码:
$ cd $ORACLE_HOME/dbs
$ mv orapwbjtest orapwbjtest.bak
$ orapwd file=orapwbjtest password=newpasswd entries=100
其中password用来设置SYS用户密码,而entries表示密码文件中可以保存多少条记录。需要注意,这个值并不是一个确切的数量,真正可以保存的记录数可能会有所出入,这和1个操作系统块能保存多少条记录有关系。
下面看看新密码是否生效:
$ sqlplus /nolog
SQL*Plus: Release 9.2.0.4.0 - Production on 星期五 4月 10 01:45:50 2009
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> conn sys/test@bjtest as sysdba
ERROR:
ORA-01031: insufficient privileges
SQL> conn sys/newpasswd@bjtest as sysdba
ERROR:
ORA-01031: insufficient privileges
SQL> conn / as sysdba已连接。
SQL> shutdown immediate数据库已经关闭。已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 9432971568 bytes
Fixed Size 756016 bytes
Variable Size 838860800 bytes
Database Buffers 8589934592 bytes
Redo Buffers 3420160 bytes数据库装载完毕。数据库已经打开。
SQL> conn sys/test@bjtest as sysdba
ERROR:
ORA-01017: invalid username/password; logon denied
警告: 您不再连接到 ORACLE。
SQL> conn sys/newpasswd@bjtest as sysdba已连接。
可以看到将原有的密码文件替换后,新的密码文件并不会当时生效,从返回的错误ORA-1031也可以看出这个问题。
需要Oracle重新启动,加载新的密码文件后才可以生效,这是SYS密码已经变为新设置的密码了。