说说密码文件Passwordfile(二)

首先,要说明的问题是,密码文件是驻留在数据库服务器上的一个文件。如果数据库是使用OUI安装的,密码文件是默认生成的。其中维护的具有SYSDBA管理权限的用户信息,也是随着系统运行自动维护的。

 

一般来说,是不需要我们直接进行密码文件的管理工作。但是有时候,当发生密码文件被破坏的时候,常常需要手工的重建密码文件。

 

“使用管理员帐号不能登陆”

 

有时候我们会发生这样的事情(在网上也经常看到这样的询问贴),需要启动数据库,但是输入了正确的用户名和密码不能登陆。这种问题的解决也比较通用。

 

1、  确认密码文件起效情况。密码文件就是一个物理文件,保存着可以在实例关闭时登录用户的帐号密码信息。但是是否使用密码文件就是需要系统参数来控制了。这个参数就是remote_login_passwordfile,其各种取值已经在前面讲述过了,这里就不累述。一般我们就确认为Exclusive或者NONE。如果不想使用密码文件,就是用NONE值。如果使用密码文件,就设置为Exclusive值。不使用密码文件,就只能使用操作系统层面验证,一般认为这样安全问题更大。所以,通常我们的设置都是exclusive

2、  判断密码文件情况。可以通过视图v$pwfile_users来检查用户列表。如果检查不到或者信息有问题,就需要手工重新创建密码文件了。

 

创建密码文件

 

使用orapwd命令创建密码文件,具体语法格式和参数为:

 

ORAPWD file=[filename] password=[password] [entries=numberuser] [force=y/n] [ignorecase=y/n]

 

其中:

ü         file表示生成文件的路径和名称(本参数是必须录入项目);

ü         password表示sys用户的密码(必须录入项目),用来验证生成操作是否合法;

ü         entries表示文件中允许容纳用户的最大数量。密码文件是容纳具有sysdbasysoper等管理的用户信息,默认情况下是由sys在其中。实际生产环境下,是不可能使用sys如此权限的用户进行日常管理的。必然有一些自定义的数据库管理员和操作员,具有sysdbasysoper权限。这些信息都要存放在密码文件中。Entries参数项目就是定义这个文件最大可以容纳的用户信息数量。Oracle官方文档中,建议设置这个值为一个高于实际需要的值,供日后拓展时使用;

ü         force:是否覆盖已存在的密码文件。如果设置为Y,表示如果现在存在有密码文件,就覆盖掉。默认值为N

ü         ignorecase:忽视大小写。是保存密码的一种策略。如果设置为Y,表示忽视大小写。注意:在早期的Oracle版本中(包括10g,用户密码是不区分大小写的,输入之后,Oracle在内部全部按照大写处理。而这个不合时宜的特性在Oracle11g中进行了修正,默认情况下,已经支持大小写用户密码。

 

下面是一个实例:

//下面是在windows cmd命令窗口中

D:\oracle\database>orapwd file=PWDorcl.ora password=syspassword entries=5 force=y

 

D:\oracle\database>

 

 

通过上面的分析,我们已经了解密码文件就是管理员sysdba和操作员sysoper用户信息在数据库外的一个备份。这样,一个新的问题出现了,账户信息在密码文件上的更新和同步是一个什么过程呢?

 

这里面,sys账户和非sys帐号有所区别。

 

首先,我们赋给scott权限sysdba

 

SQL> select * from v$pwfile_users;

 

USERNAME                       SYSDB SYSOP

------------------------------ ----- -----

SYS                            TRUE  TRUE

//授权

SQL> grant sysdba to scott;

 

授权成功。

 

SQL> select * from v$pwfile_users;

 

USERNAME                       SYSDB SYSOP

------------------------------ ----- -----

SYS                            TRUE  TRUE

SCOTT                          TRUE  FALSE

 

Scott也可以使用密码文件进行登录了。下面,我尝试修改两个用户的密码。

 

SQL> -- Modify the user

SQL> alter user SCOTT

  2    identified by tiger1;

 

User altered

 

SQL>

SQL> -- Modify the user

SQL> alter user SYS

  2    identified by sys;

 

User altered

 

停止实例运行,再次空实例登录。注意:为验证效果,已关闭操作系统验证机制!

 

 

SQL> shutdown

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> quit

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options 断开

 

D:\oracle\database>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 1 24 00:07:00 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

SQL> conn / as sysdba

ERROR:

ORA-01031: insufficient privileges  //OS层面验证已经终止

 

SQL> conn sys/sys as sysdba

已连接到空闲例程。

SQL> conn scott/tiger1 as sysdba

已连接到空闲例程。

 

 

发现,在修改了密码的情况下。密码文件是会随着alter user命令而进行修改同步的。

 

那么,如果我重建了密码文件,或者修改了参数remote_login_passwordfile的情况下,又是如何?

 

先看重建密码文件。

 

D:\oracle\database>orapwd file=PWDorcl.ora password=sys entries=5 force=y //重建密码文件

 

此时,密码文件中的用户信息:

//重建密码文件之前!

SQL> select * from v$pwfile_users;

 

USERNAME                       SYSDB SYSOP

------------------------------ ----- -----

SYS                            TRUE  TRUE

SCOTT                          TRUE  FALSE

//重建密码文件之后

SQL> select * from v$pwfile_users;

 

USERNAME                       SYSDB SYSOP

------------------------------ ----- -----

SYS                            TRUE  TRUE

 

 

差异显而易见,当重新创建密码文件之后,系统对sys用户和非sys用户的处理方法是不同的。如果是sys用户,新密码文件是存在的。但是对于非sys用户的具有管理员权限的用户,密码文件中的信息被去除掉。

 

如果这时候我们登录,则:

//实验需要,关闭数据库

SQL> shutdown

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> quit

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options 断开

 

D:\oracle\database>sqlplus /nolog

 

SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 1 24 00:22:41 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

SQL> conn / as sysdba

ERROR:

ORA-01031: insufficient privileges  //OS层面禁用

 

SQL> conn sys/sys as sysdba; //sys还在密码文件中,登录无问题

已连接到空闲例程。

SQL> conn scott/tiger1 as sysdba;

ERROR:

ORA-01031: insufficient privileges  //登录失败!!!

 

 

警告: 您不再连接到 ORACLE

SQL>

 

 

那么,这种时候,scott还具有sysdba权限,如何处理呢?需要手工的重新对scott(非sys)用户授权。

 

SQL> revoke sysdba from scott;

撤销成功。

 

SQL> grant sysdba to scott;

授权成功。

 

SQL> select * from v$pwfile_users;

 

USERNAME                       SYSDB SYSOP

------------------------------ ----- -----

SYS                            TRUE  TRUE

SCOTT                          TRUE  FALSE

 

 

发现这样处理下之后,scott又重新出现在密码文件中了。

 

那么,如果变化参数remote_login_passwordfile呢?

 

 

SQL> alter system set remote_login_passwordfile=NONE scope=spfile;

 

系统已更改。

 

--当重新启动之后

SQL> select * from v$pwfile_users;

 

未选定行 –NONE选项,表示不需要使用密码文件;

 

--再次修改回原有结构

SQL> alter system set remote_login_passwordfile=EXCLUSIVE scope=spfile;

 

系统已更改。

此时,重新启动数据库服务器。

 

SQL> conn sys/sys as sysdba; //sys密码文件起效

已连接到空闲例程。

SQL> conn scott/tiger1 as sysdba; //scott密码文件起效

已连接到空闲例程。

SQL> startup

ORACLE 例程已经启动。

 

Total System Global Area  612368384 bytes

Fixed Size                  1250428 bytes

Variable Size             205523844 bytes

Database Buffers          398458880 bytes

Redo Buffers                7135232 bytes

数据库装载完毕。

数据库已经打开。

 

//判断密码文件用户

SQL> select * from v$pwfile_users;

 

USERNAME                       SYSDB SYSOP

------------------------------ ----- -----

SYS                            TRUE  TRUE

SCOTT                          TRUE  FALSE

 

结论:当参数模式从Exclusive转化到NONE的时候,密码文件彻底失效,密码文件视图结果为空。当从NONE转回到Exclusive的时候,密码文件会重新建立。这个过程中,sys与非sys用户效用相同。

 

下面,我们来进行一些实验,进一步了解密码文件。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17203031/viewspace-684510/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/17203031/viewspace-684510/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值