正确认识password file的作用

正确认识password file的作用

                                                                                                   ----作者: eygle

许多人都知道,在数据库没有正式启动前,数据库的内建用户是无法通过数据库来验证身份的,但口令文件中存放sysdba/sysoper用户的用户名及口令却允许用户通过口令文件验来证,它可以在数据库未启动之前登陆,然后再启动数据库。

    (假如没有口令文件,在数据库未启动之前就只能通过操作系统认证)

    在我们使用Rman时,许多情况下需要在nomountmount等状态下对数据库进行处理,因此这就要求sysdba权限如果属于本地DBA组,才可以通过操作系统认证登陆。

    (假如是远程sysdba登陆,需要通过passwordfile认证)

1.remote_login_passwordfile = NONE

    在此处我们需要停用口令文件验证,因为Oracle不允许远程SYSDBA/SYSOPER身份登录。

    local

    [oracle@jumper oracle]$ sqlplus "/ as sysdba"

    SQL*Plus Release 9.2.0.3.0 - Production on Thu Apr 15 095845 2004

    Copyright c 1982 2002Oracle Corporation. All rights reserved.

    Connected to

    Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production

    With the Partitioning OLAP and Oracle Data Mining options

    JServer Release 9.2.0.3.0 - Production

    SQL> alter user sys identified by oracle

    User altered.

    SQL> show parameter pass

    NAME TYPE VALUE

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

    remote_login_passwordfile string NONE

    remote

    E\Oracle\ora92\bin>sqlplus /nologSQL*Plus Release 9.2.0.4.0 -

    Production on 星期四 4 15 093922 2004Copyright c 1982 2002 Oracle

    Corporation. All rights reserved.SQL> connect sys/oracle@hsjf as Sysdba

ERRORORA-01017 invalid username/password logon denied

大家可以发现,此处是无法通过口令文件验证的。

 

 

2.remote_login_passwordfile = exclusive

    SQL> alter system set remote_login_passwordfile=exclusive scope=spfile

    System altered.

    SQL> startup force

    ORACLE instance started.

    Total System Global Area 131142648 bytes

    Fixed Size 451576 bytes

    Variable Size 104857600 bytes

    Database Buffers 25165824 bytes

    Redo Buffers 667648 bytes

    Database mounted.

    Database opened.

    SQL> show parameter pass

    NAME TYPE VALUE

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

    remote_login_passwordfile string EXCLUSIVE

    SQL> alter user sys identified by oracle

    User altered.

    remote

    E\Oracle\ora92\bin>sqlplus /nologSQL*Plus Release 9.2.0.4.0 -

    Production on 星期四 4 15 094711 2004Copyright c 1982 2002 Oracle

    Corporation. All rights reserved.SQL> connect sys/oracle@hsjf as

    sysdba已连接。SQL> show userUSER "SYS"SQL>

    此处等同于通过口令文件验证登录。

3.继续测试

    假如此时我们删除passwdfilesysdba/sysoper将会无法认证,从而无法登陆数据库。

    Server

    SQL>

    [oracle@jumper oracle]$ cd $ORACLE_HOME/dbs

    [oracle@jumper dbs]$ ls orapwhsjf

    orapwhsjf

    [oracle@jumper dbs]$ mv orapwhsjf orapwhsjf.bak

    [oracle@jumper dbs]$

    Remote

    E\Oracle\ora92\bin>sqlplus /nolog

    SQL*Plus Release 9.2.0.4.0 - Production on 星期四 4 15 095014 2004

    Copyright c 1982 2002 Oracle Corporation. All rights reserved.

    SQL> connect sys/oracle@hsjf as sysdba

    ERROR

    ORA-01031 insufficient privileges

    SQL>

    这实际上就是无法通过口令文件验证身份

4.假如丢失了passwdfile

    假如你使用passwdfile后却意外丢失,那么此时将不能启动数据库。

    SQL> startup force

    ORACLE instance started.

    Total System Global Area 131142648 bytes

    Fixed Size 451576 bytes

    Variable Size 104857600 bytes

    Database Buffers 25165824 bytes

    Redo Buffers 667648 bytes

    ORA-01990 error opening password file '/opt/oracle/product/9.2.0/dbs/orapw'

    ORA-27037 unable to obtain file status

    Linux Error 2 No such file or directory

    Additional information 3

    我们可以通过orapwd重建口令文件来解决此问题

    此处我们恢复口令文件就可以了

    SQL>

    [oracle@jumper oracle]$ mv $ORACLE_HOME/dbs/orapwhsjf.bak orapwhsjf

    [oracle@jumper oracle]$ exit

    exit

    SQL> alter database open

    Database altered.

SQL>

5. remote_login_passwordfile = shared

    Oracle9i文档说明:

    SHARED

    More than one database can use a password file. However the only user recognized by the password file is SYS.

    ——多个数据库可以共享一个口令文件,但是只可以识别一个用户:SYS

    SQL> select * from v$pwfile_users

    USERNAME SYSDB SYSOP

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

    SYS TRUE TRUE

    SQL> grant sysdba to eygle

    grant sysdba to eygle

    *

    ERROR at line 1

    ORA-01994 GRANT failed cannot add users to public password file

    SQL> show parameter password

    NAME TYPE VALUE

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

    remote_login_passwordfile string SHARED

    大家可以发现,此时的口令文件中是不能添加用户的。

    很多人可能会问:口令文件的缺省名称是orapw,如何才能共享?

    其实Oracle数据库在启动时,首先查找的是orapw的口令文件,假如该文件不存在,则开始查找,orapw的口令文件。如果口令文件命名为orapw,多个数据库就可以共享。

    再来看一下测试:

    [oracle@jumper dbs]$ sqlplus "/ as sysdba"

    SQL*Plus Release 9.2.0.3.0 - Production on Tue Jul 6 094034 2004

    Copyright c 1982 2002 Oracle Corporation. All rights reserved.

    Connected to

    Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production

    With the Partitioning OLAP and Oracle Data Mining options

    JServer Release 9.2.0.3.0 - Production

    SQL> shutdown immediate

    Database closed.

    Database dismounted.

    ORACLE instance shut down.

    SQL>

    [oracle@jumper dbs]$ ls

    hsjf initdw.ora inithsjf.ora init.ora lkHSJF orapwhsjf spfilehsjf.ora

    [oracle@jumper dbs]$ mv orapwhsjf orapwhsjf.bak

    [oracle@jumper dbs]$ exit

    exit

    SQL> startup

    ORACLE instance started.

    Total System Global Area 235999908 bytes

    Fixed Size 451236 bytes

    Variable Size 201326592 bytes

    Database Buffers 33554432 bytes

    Redo Buffers 667648 bytes

    ORA-01990 error opening password file '/opt/oracle/product/9.2.0/dbs/orapw'

    ——它是最后查找的文件

    ORA-27037 unable to obtain file status

    Linux Error 2 No such file or directory

    Additional information 3

    建立orapw口令文件,此时可以打开数据库。

    SQL>

    [oracle@jumper dbs]$ ls

    hsjf initdw.ora inithsjf.ora init.ora lkHSJF orapwhsjf.bak spfilehsjf.ora

    [oracle@jumper dbs]$ cp orapwhsjf.bak orapw

    [oracle@jumper dbs]$ exit

    exit

    SQL> alter database open

    Database altered.

    SQL> show parameter passw

    NAME TYPE VALUE

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

    remote_login_passwordfile string SHARED

    SQL>

很多人可能会产生有这样的疑问,多个Exclusive的数据库是否可以共享一个口令文件(orapw)呢?

    继续回到试验中:

    SQL> show parameter passwordNAME TYPE VALUE

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

    remote_login_passwordfile string SHARED

    [oracle@jumper dbs]$ strings orapw

    ]\[Z

    ORACLE Remote Password file

    INTERNAL

    AB27B53EDC5FEF41

    8A8F025737A9097A

    注意这里仅记录着INTERNAL/SYS的口令

    REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

    SQL> alter system set remote_login_passwordfile=exclusive scope=spfileSystem altered.

    SQL> startup force

    ORACLE instance started.

    Total System Global Area 235999908 bytes

    Fixed Size 451236 bytes

    Variable Size 201326592 bytes

    Database Buffers 33554432 bytes

    Redo Buffers 667648 bytes

    Database mounted.

    Database opened.

    SQL>

    [oracle@jumper bin]$ cd $ORACLE_HOME/dbs

    [oracle@jumper dbs]$ strings orapw

    ]\[Z

    ORACLE Remote Password file

    HSJF

    INTERNAL

    AB27B53EDC5FEF41

    8A8F025737A9097A

    [oracle@jumper dbs]$ exit

    exit

    注意此处,以EXCLUSIVE方式启动以后,实例名称信息就会被写入口令文件。

    如果此时有其它实例以Exclusive模式启动仍然可以使用这个口令文件,口令文件中的实例名称同时被改写。

    这也就是说,数据库只在启动过程中才读取口令文件,数据库运行过程中并不锁定该文件,类似于pfile/spfile文件。

    SQL> select * from v$pwfile_usersUSERNAME SYSDB SYSOP

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

    SYS TRUE TRUE

    SQL> grant sysdba to eygle

    Grant succeeded.

    SQL> select * from v$pwfile_users

    USERNAME SYSDB SYSOP

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

    SYS TRUE TRUE

    EYGLE TRUE FALSE

    SQL>

    [oracle@jumper bin]$ cd $ORACLE_HOME/dbs

    [oracle@jumper dbs]$ strings orapw

    ]\[Z

    ORACLE Remote Password file

    HSJF

    INTERNAL

    AB27B53EDC5FEF41

    8A8F025737A9097A

    >EYGLE

    B726E09FE21F8E83

    注意:

    在此处我们可以增加SYSDBA用户,并且这些信息可以被写入到口令文件。

    如果我们在口令文件中增加了其他SYSDBA用户,这个文件就不能被其它Exclusive的实例共享。

    仔细了解过后,我们可以发觉,口令文件对于其他用户来说其实就是启到了一个sudo的作用。

6.重建口令文件

    假如口令文件丢失,使用orapwd可以很方便的重建口令文件,详细的语法如下:

    [oracle@jumper oracle]$ orapwdUsage orapwd file= password= entries= 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.

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

转载于:http://blog.itpub.net/8720638/viewspace-253283/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值