簡述密碼檔案的兩個特性

realkid4發表於2012-09-26

 

Oracle密碼檔案Password File是對sysdba和sysoper等高系統許可權使用者密碼進行管理的一個載體。對我們來說,password file是在資料庫之外的一個密碼駐留點。本篇一起來討論一下關於password file的一些特徵和要點。

 

1、密碼檔案使用者管理

 

我們選擇Oracle 11g進行試驗。密碼檔案在檔案系統中是一個封閉的二進位制檔案,我們一般是沒有辦法看到其中的資料的。

 

但是,當Oracle啟動之後,使用檢視v$pwfile_users,我們可以看到當前密碼檔案其中包括的超級使用者。

 

 

SQL> conn sys/oracle@ora11gp as sysdba

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Connected as SYS

 

SQL> select * from v$pwfile_users;

 

USERNAME                       SYSDBA SYSOPER SYSASM

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

SYS                            TRUE   TRUE    FALSE

 

 

特殊許可權使用者名稱稱全部列在其中。注意,在Oracle 11g中,引入了sysasm許可權。在之前的版本中,我們只能看到sysdba和sysoper。

 

對於sysdba和sysoper的差別,主要體現在sysoper只有對於資料庫一些管理性操作,如啟動關閉資料庫、備份還原等。而sysdba還要包括物件訪問使用許可權上。11g中新加入的sysasm許可權主要是針對ASM和Grid Infrasture元件的管理。

 

如果我們顯示的進行sysdba和sysoper許可權的賦予,Oracle自動的將使用者的資訊新增到密碼檔案中。如下:

 

為了更好驗證,我們建立一個名為test的使用者。

 

 

SQL> create user test identified by test;

User created

 

SQL> grant resource, connect to test;

Grant succeeded

 

 

給scott和test兩個使用者分別授予sysdba和sysoper許可權。

 

 

SQL> grant sysdba to scott;

Grant succeeded

 

SQL> grant sysoper to test;

Grant succeeded

 

SQL> select * from v$pwfile_users;

 

USERNAME                       SYSDBA SYSOPER SYSASM

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

SYS                            TRUE   TRUE    FALSE

SCOTT                          TRUE   FALSE   FALSE

TEST                           FALSE  TRUE    FALSE

 

 

2、sysdba和sysoper使用者登入試驗

 

如果我們的scott和test兩個使用者已經有了sysdba和sysoper許可權,就意味著兩個人已經可以作為sysdba和sysoper登入。

 

當我們從遠端系統進行登入的時候。

 

 

(遠端)

SQL> conn scott/tiger@ora11gp as sysdba

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Connected as SYS

 

SQL> show user;

User is "SYS"

 

SQL> conn test/test@ora11gp as sysoper;

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Connected as PUBLIC

 

SQL> show user

User is "PUBLIC"

 

 

 

這裡,我們發現了一個問題。首先,我們是透過遠端登入的,OS匿名驗證肯定是不能使用的,這裡的密碼驗證一定是使用的。但是,我們登入之後,scott使用者顯示出的卻是sys使用者。而具有sysoper許可權的test使用者,顯示出的卻是public使用者。Public使用者是Oracle內部的一個“偽”使用者,充當虛擬的角色。

 

那麼,我們如果採用本地登入,效果是否相同呢?我們試驗中首先禁用掉本地OS驗證機制。

 

--已經禁用掉了OS驗證;

[oracle@bsplinux admin]$ cat sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES=(NONE)

[oracle@bsplinux admin]$

 

 

oracle@bsplinux admin]$ sqlplus /nolog

 

SQL*Plus: Release 11.2.0.1.0 Production on Mon Sep 24 22:17:22 2012

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

--匿名登入取消;

SQL> conn / as sysdba 

ERROR:

ORA-01031: insufficient privileges

 

--As sysdba

SQL> conn scott/tiger as sysdba

Connected.

SQL> show user

USER is "SYS"

SQL>

 

 

SQL> conn scott/tiger as sysoper;

ERROR:

ORA-01031: insufficient privileges

 

Warning: You are no longer connected to ORACLE.

 

 

SQL> conn test/test as sysdba

ERROR:

ORA-01031: insufficient privileges

 

--As sysoper

SQL> conn test/test as sysoper  

Connected.

SQL> show user

USER is "PUBLIC"

SQL>

 

 

效果相同。所以,我們可以得到結論:被賦予sysdba和sysoper許可權的使用者,是可以以as sysxxx的語句格式進行登入。但是登入之後,sysdba使用者被替換為sys,而sysoper使用者被替換為public。

 

3、密碼檔案重置

 

密碼檔案重置就是使用Oracle的orapwd工具重新建立一個全新的密碼檔案。但是,建立密碼檔案的時候,其中只會包括sys使用者的資訊,其他所有sysdba、sysoper和sysasm許可權的使用者不會被新增到檔案中。並且進一步的是,這些使用者的許可權被剝奪。

 

Oracle密碼檔案位置遵守Oracle OFA規範。在windows環境下,該檔案位於$ORACLE_HOME下的database資料夾。而在Linux/Unix環境下,位於dbs資料夾。

 

 

[oracle@bsplinux dbs]$ pwd

/u01/app/oracle/dbs

[oracle@bsplinux dbs]$ ls -l

total 9700

-rw-rw---- 1 oracle oinstall    1544 May 22 17:16 hc_DBUA0.dat

-rw-rw---- 1 oracle oinstall    1544 May 22 17:19 hc_ora11g.dat

-rw-r--r-- 1 oracle oinstall    2851 May 15  2009 init.ora

-rw-r----- 1 oracle oinstall      24 May 22 19:32 lkORA11G

-rw-r----- 1 oracle oinstall    2048 Sep 24 22:12 orapwora11g

drwx------ 2 oracle oinstall    4096 May 22 17:16 peshm_DBUA0_0

drwx------ 2 oracle oinstall    4096 May 22 17:19 peshm_ora11g_0

-rw-r----- 1 oracle oinstall 9846784 Sep 24 19:45 snapcf_ora11g.f

-rw-r----- 1 oracle oinstall    3584 Sep 24 22:14 spfileora11g.ora

 

 

我們可以使用orapwd工具重新生成密碼檔案。

 

 

[oracle@bsplinux dbs]$ orapwd file=orapwora11g password=oracle entries=5

[oracle@bsplinux dbs]$ ls -l

total 9692

-rw-rw---- 1 oracle oinstall    1544 May 22 17:16 hc_DBUA0.dat

-rw-rw---- 1 oracle oinstall    1544 May 22 17:19 hc_ora11g.dat

-rw-r--r-- 1 oracle oinstall    2851 May 15  2009 init.ora

-rw-r----- 1 oracle oinstall      24 May 22 19:32 lkORA11G

-rw-r----- 1 oracle oinstall    2048 Sep 24 22:21 orapwora11g

drwx------ 2 oracle oinstall    4096 May 22 17:16 peshm_DBUA0_0

drwx------ 2 oracle oinstall    4096 May 22 17:19 peshm_ora11g_0

 

 

對於新生成的密碼檔案orapwora11g,我們可以檢視一下其中資訊。

 

 

SQL> conn sys/oracle@ora11gp as sysdba

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Connected as SYS

 

SQL> select * from v$pwfile_users;

 

USERNAME                       SYSDBA SYSOPER SYSASM

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

SYS                            TRUE   TRUE    FALSE

 

 

只有一條sys的使用者資訊。scott和test使用者的sysdba和sysoper許可權被剝奪。

 

 

SQL> conn scott/tiger@ora11gp as sysdba

ERROR:

ORA-01031: insufficient privileges

 

SQL> conn test/test@ora11gp as sysoper

ERROR:

ORA-01031: insufficient privileges

 

 

4、密碼修改副效應

 

注意:在orapwd命令引數中,包括一個password引數,要求輸入密碼。這個引數存在一個潛在效果就是修改sys使用者密碼。

 

當前sys使用者密碼為oracle。

 

 

SQL> conn sys/oracle@ora11gp as sysdba

已連線。

SQL>

 

 

重新生成密碼檔案。

 

 

[oracle@bsplinux dbs]$ orapwd file=orapwora11g password=sys entries=5

[oracle@bsplinux dbs]$ ls -l

total 9692

-rw-rw---- 1 oracle oinstall    1544 May 22 17:16 hc_DBUA0.dat

-rw-rw---- 1 oracle oinstall    1544 May 22 17:19 hc_ora11g.dat

-rw-r--r-- 1 oracle oinstall    2851 May 15  2009 init.ora

-rw-r----- 1 oracle oinstall      24 May 22 19:32 lkORA11G

-rw-r----- 1 oracle oinstall    2048 Sep 24 22:25 orapwora11g

drwx------ 2 oracle oinstall    4096 May 22 17:16 peshm_DBUA0_0

drwx------ 2 oracle oinstall    4096 May 22 17:19 peshm_ora11g_0

-rw-r----- 1 oracle oinstall 9846784 Sep 24 19:45 snapcf_ora11g.f

-rw-r----- 1 oracle oinstall    3584 Sep 24 22:14 spfileora11g.ora

 

 

SQL> conn sys/oracle@ora11gp as sysdba

ERROR:

ORA-01017: invalid username/password; logon denied

 

警告: 您不再連線到 ORACLE。

SQL> conn sys/sys@ora11gp as sysdba

已連線。

SQL>

 

 

使用者sys的密碼被修改。

 

使用密碼檔案重新生成的方法來修改sys使用者帳號,筆者認為存在很大的安全隱患。如果伺服器OS使用者可以自行orapwd程式,那麼也就是控制了sys使用者帳號。

 

另一方面,使用密碼檔案來修改稿許可權使用者帳號,也是一種策略手段。在MOS中,就有介紹使用密碼檔案重置來修改ASM例項管理員密碼的方法。

 

 

5、結論

 

Oracle密碼檔案是Oracle安全的一道重要防線。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-745065/,如需轉載,請註明出處,否則將追究法律責任。

相關文章