查看並修改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始終在每個細節上進步着。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.