Oracle数据库系统DBMS是由数据库实例和数据库本身构成的。数据库实例本质上就是一系列Oracle相关的进程外加一块内存区域构成。而数据库本身指的就是保存在物理硬盘上的数据库文件。
数据库文件是由多种类型,不同类型文件在数据库工作过程中扮演不同的作用。根据对数据库核心工作的影响,文件也是有等级的。最紧要的文件三个为数据文件、控制文件和在线online日志文件。三个文件如果遭到破坏丢失,会引起数据库崩溃或者严重故障。其次为参数文件、归档文件、密码文件、Alert和跟踪文件等文件。今天我们一起看一下密码文件。
密码文件Password解决的是数据库用户非操作系统验证问题。Oracle对用户名、密码的验证是有很多层次的,分别为操作系统层面和数据库层面。
操作系统层面验证,就是利用用户登录操作系统时的操作系统帐号作为验证手段。当我们登录一个host主机(操作系统),实际上已经经过了操作系统级别的验证。Oracle在验证用户登录的时候,是可以指定是否使用操作系统的验证结果。如果系统设置为允许操作系统验证结果,那么是不需要输入用户名和密码就可以登入系统的。
我们经常登录数据库服务器本机(一般通过ssh或者telnet远程连接),之前是需要输入OS的用户名和密码。之后,常常使用这个命令进行登录。
[oracle@oracle11g ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Wed Jan 19 01:24:11 2011
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> conn / as sysdba //没有指定用户名和密码
Connected.
SQL> show user
USER is "SYS" //竟然是以SYS最高权限用户进行登录的。
SQL>
我们常常使用的conn / as sysdba,就表示不使用数据库实例验证,直接使用操作系统层面进行验证。这里面,要注意两个问题:
1、 并不是每个操作系统用户都允许这样登录系统,操作系统层面的验证很多时候对我们是很严格的。一般都是在安装Oracle的时候,默认进行的操作系统角色权限配置。比如:在windows环境下,安装oracle的用户(管理员用户)就被GUI安装程序设为为一个ora_dba的角色组。在Unix/Linux环境下,也有osdba的角色组。将登录用户名加入到改组中,实际上就可以通过操作系统验证;
2、 是否使用OS验证,是有相应的选项的。在sqlnet.ora文件中,有对应的参数项,可以适时关闭操作系统验证机制。不允许只通过操作系统就可以登录系统的情况。在这个问题上,可以参考笔者的一篇文章:http://space.itpub.net/17203031/viewspace-681029。
注意:这里对远程登录和本地登录一个区分。本文提到的远程登录,是通过Oracle客户端软件,通过访问远程数据库服务器的监听器,构建与实例的连接。在这个过程中,是没有输入服务器用户名、密码要求的。也就是说,远程登录从没有登录OS。本地登录是通过远程桌面、telnet、ssh连接到服务器上,输入OS帐号登录。运行的程序是驻留在数据库服务器上的程序。
数据库层面的验证就是数据库用户名和密码的验证。这部分信息通常是保存在数据库文件内部,是数据字典的一部分内容。只有在数据库实例启动并且加载上的情况下,才可以访问到。
这是,就出现了一个矛盾。如果当前我的数据库系统没有启动,没法访问用户帐户信息。怎样进行登录?
我们通常的解决方法是使用telnet/ssh登录到服务器本地。使用conn / as sysdba连接上空实例,之后再启动。也就是利用操作系统层面的验证。那么,如果我不希望使用操作系统层面的验证,难道就没有办法登录实例了吗?
于是,密码文件就出现了。
简单的说,密码文件就是一个保存在数据文件外的信息文件,可以在数据文件没有加载的时候被实例访问到。里面保存的就是用户名信息和密码信息,通常是那些执行启动、关闭等维护权限(sysdba/sysoper)用户的密码,如sys。
注意:
1、 在创建数据库的时候,如果是使用DBCA进行创建,密码文件是已经创建的;
2、 在早期的版本中,Oracle用户名和密码,特别是密码是没有大小写区分的。从Oracle11gr1开始,用户名密码开始大小写敏感;
密码文件在不同平台上的表现形式是有差异的。在windows平台上,密码文件命名为pwd.ora,存放路径为$ORACLE_HOME\database目录。
D:\oracle\database>dir
驱动器 D 中的卷没有标签。
卷的序列号是 2294-1384
D:\oracle\database 的目录
2011-01-19 21:41
.2011-01-19 21:41
..2008-09-01 20:35
archive2008-09-01 20:52 2,048 hc_orcl.dat
2008-09-01 20:40 39 initorcl.ora
2005-06-25 03:18 31,744 oradba.exe
2011-01-17 20:59 10,178 oradim.log
2010-05-09 13:27 1,536 PWDorcl.ora //密码文件
5 个文件 45,545 字节
3 个目录 65,762,430,976 可用字节
在unix/linux环境下,密码文件通常命名为orapw,位于$ORACLE_HOME/dbs目录下。
[oracle@oracle11g ~]$ ls -l $ORACLE_HOME/dbs
total 32
-rw-rw---- 1 oracle oinstall 1544 Oct 1 21:44 hc_DBUA0.dat
-rw-rw---- 1 oracle oinstall 1544 Oct 1 21:47 hc_wilson.dat
-rw-r--r-- 1 oracle oinstall 2851 May 15 2009 init.ora
-rw-r----- 1 oracle oinstall 24 Oct 1 21:48 lkWILSON
-rw-r----- 1 oracle oinstall 1536 Jan 6 14:27 orapwwilson
drwx------ 2 oracle oinstall 4096 Oct 1 21:44 peshm_DBUA0_0
drwx------ 2 oracle oinstall 4096 Oct 1 21:47 peshm_wilson_0
-rw-r----- 1 oracle oinstall 2560 Jan 19 01:23 spfilewilson.ora
密码文件中的内容,是进行过加密的。直接打开不能读取,只能通过启动实例之后,在视图v$pwfile_users中查看。
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS TRUE TRUE FALSE //只记录了一个拥有sysdba/sysoper权限的用户;
此外,在Oracle中,有一个控制参数remote_login_passwordfile,用来确定登录方式的验证。
SQL> show parameter remote_login
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile string EXCLUSIVE
一般该项参数设置的都是EXCLUSIVE,表示在远程登录的时候使用密码文件验证。此外,还有其他可选择值。
NONE:不使用password file进行验证;
Shared:表示在RAC或者多实例公用host的情况下,使用一份passwordfile。这种方式下,sys的密码是不能够轻易修改的。此外,对于非sys用户加入到密码文件中,也有一些限制。
下面我们来介绍如何来管理密码文件。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17203031/viewspace-684311/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17203031/viewspace-684311/