查看並修改Oracle用戶的密碼(適用於11g)

 有時候我們可能不知道一個用戶的密碼,但是又需要以這個用戶做一些操作,又不能去修改掉這個用戶的密碼,或者自己乾脆忘記密碼了,想修改自己的密碼,這個時候,就可以利用一些小竅門,來完成操作。
   還有,在數據庫安全性檢查中有一項首先要完成的工作,就是檢查數據庫中的用戶密碼是否還仍然保留着默認值,比如sys的密碼是否還是change_on_install,system的密碼是否還是manager,scott的密碼是否還是tiger。

Oracle 11g之前,我們需要手工來完成這樣的工作,大概步驟是:
1. 創建一張自定義的表,保存下常用的系統用戶以及默認密碼的HASH值。
2. 將系統中的用戶密碼HASH值與該表中的HASH值比較,如果相同,則表明還在使用默認值。

注意:在數據字典中存儲的密碼是被HASH算法加密過的,加密後的值不但跟密碼本身有關還跟用戶名有關,也就是,如果是不相同的用戶名那麼即使是完全相同的密碼,加密後的HASH值也是不一樣的。這樣保證了每一個用戶的每一個密碼都有自己獨一無二的HASH值。

在Oracle 11g之前,加密後的密碼可以從DBA_USERS數據字典的PASSWORD字段中獲得,因此可以通過這個字段中存儲的值來做是否是默認值的檢查。但是在11g中,PASSWORD字段卻不再顯示密碼的內容了。
先看一下文檔中對這個字段的描述:    

Indicates whether the user is authenticated by OID (GLOBAL) or externally authenticated (EXTERNAL); NULL otherwise

SQL> SELECT username,decode(password,NULL,'NULL',password) password FROM dba_users;
 
USERNAME                       PASSWORD
------------------------------ ------------------------------
MGMT_VIEW            NULL
SYS                  NULL
SYSTEM                          NULL
DBSNMP                         NULL
SNPM                             NULL
SYSMAN                         NULL
SNPW                            NULL
SCOTT                           NULL
KAMUS                           NULL
OUTLN                           NULL
WMSYS                           NULL
DIP                                NULL
ORACLE_OCM                   NULL
TSMSYS                          NULL
 
14 rows selected
可以看到PASSWORD字段已經不再顯示密碼內容,全部都爲空。

那麼,如果再去檢查這些用戶是否還在使用默認的密碼呢?

方法一:從SYS.USER$基表中檢查,在基表的password字段中仍然可以查到HASH後的值。

SQL>  SELECT name,password FROM user$ WHERE name='SCOTT';
 
NAME                           PASSWORD
------------------------------ ------------------------------
SCOTT                          F894844C34402B67
方法二:這是推薦的方法,最簡單的方法,11g中可以使用的方法,11g提供了新的DBA_USERS_WITH_DEFPWD視圖,該視圖中包含了所有還在使用默認密碼的用戶名。

SQL> ALTER user scott IDENTIFIED BY tiger;
 
User altered.
 
SQL> SELECT * FROM DBA_USERS_WITH_DEFPWD WHERE username='SCOTT';
 
USERNAME
------------------------------
SCOTT
 
SQL> ALTER user scott IDENTIFIED BY tiger1;
 
User altered.
 
SQL> SELECT * FROM DBA_USERS_WITH_DEFPWD WHERE username='SCOTT';
 
no rows selected
Oracle對於安全性的支持力求做到業界領先,Oracle始終在每個細節上進步着。
發佈了60 篇原創文章 · 獲贊 9 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章