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"