5.3.3 口令文件的创建

口令文件用来记录具有SYSDBA或者SYSOPER限的用户的口令。在UNIX/Linux系统中,口令文件存放在Oracle安装目录的dbs子目录下,文件命名规则是:orapw<sid>.ora,其中<sid>指的是实例名称。在Windows中,口令文件存储在database子目录下,文件的命名规则是:PWD<sid>.ora。

在实例刚刚创建时,这个文件只包含SYS一个用户。在实例的运行过程中,如果一个普通用户获得了SYSDBA或者SYSOPER权限,这个用户将被自动添加到这个文件中。

Oracle提供了一个orapwd命令,它的功能是管理口令文件,包括创建口令文件、改变口令文件的位置和名称、修改SYS用户的口令等。命令的执行格式为:


orapwd file=口令文件password=口令entries=用户数目


其中参数file用于指定口令文件的位置和名称,password参数用于指定SYS用户的口令,entries用于指定口令文件可以记录的最大用户数目。例如,下面的命令为实例orcl创建口令文件:


orapwd file=/u01/app/oracle/dbs/orapworcl.ora password=1234 entries=30


在创建实例时,如果在命令oradim中使用-intpwd选项为SYS用户指定了口令,那么口令文件将自动创建。在实例运行过程中,可以废弃以前的口令文件,创建新的口令文件,同时可以修改SYS用户的口令。

为了管理方便,Oracle提供了动态性能视图v$pwfile_users,如果希望了解口令文件中的用户信息,可以查询这个视图,如:


SQL>SELECT*FROM v$pwfile_users;

USERNAME SYSDBA SYSOPER


SYS TRUE TRUE


其中USERNAME列是指口令文件中的用户,SYSDBA列指定用户是否具有SYSDBA权限,而SYSOPER列指定该用户是否具有SYSOPER权限。

如果一个用户具有SYSDBA或SYSOPER权限,这个用户将被记录在口令文件中。例如,以下命令将创建用户user1,并授予这个用户SYSDBA和SYSOPER权限:


SQL>CREATE USER user1 IDENTIFIED BY"1234";

SQL>GRANT SYSDBA TO user1;

SQL>GRANT SYSOPER TO user1;


这时如果再查询动态性能视图V$PWFILE_USERS,结果如下:


SQL>SELECT*FROM v$pwfile_users;

USERNAME SYSDBA SYSOPER


SYS TRUE TRUE

USER1 TRUE TRUE


如果执行命令REVOKE从某用户回收了SYSDBA和SYSOPER权限,这个用户将被从口令文件中删除,但这个用户在数据库中依然存在。

对口令文件有影响的一个初始化参数是REMOTE_LOGIN_PASSWORDFILE,这个参数的作用是指定是否用口令文件来验证SYS用户的登录。这个参数有三个可选值:

·NONE:忽略口令文件,SYS用户只能通过操作系统进行验证。

·EXCLUSIVE:用户登录时,通过口令文件验证SYS用户的身份。

·SHARED:口令文件将在多个数据库之间共享。

当把初始化参数REMOTE_LOGIN_PASSWORDFILE的值指定为EXCLUSIVE时,系统通过口令文件验证SYS用户的身份。在这种情况下,同一个系统中不同的数据库都有一个单独的口令文件,并且在口令文件中可以容纳多个具有SYSDBA或SYSOPER权限的用户。

当把初始化参数REMOTE_LOGIN_PASSWORDFILE的值指定为SHARED时,系统也通过口令文件验证SYS用户的身份,但是同一个系统中多个数据库之间共享同一个口令文件,用同一个SYS用户可以登录所有的数据库服务器。在这种情况下,口令文件中只能包含SYS一个用户。

当某个用户以SYSDBA或SYSOPER身份登录数据库服务器时,需要使用AS SYSDBA或AS SYSOPER子句,例如:


SQL>CONN scott/tiger AS SYSDBA


这时系统实际上将用户的身份切换到了SYS用户,这一点通过以下命令的执行结果可以得到验证:


SQL>SHOW USER

USER为"SYS"