還有,在數(shù)據(jù)庫安全性檢查中有一項首先要完成的工作,,就是檢查數(shù)據(jù)庫中的用戶密碼是否還仍然保留著默認(rèn)值,,比如sys的密碼是否還是change_on_install,system的密碼是否還是manager,,scott的密碼是否還是tiger,。
在Oracle 11g之前,我們需要手工來完成這樣的工作,,大概步驟是:
1. 創(chuàng)建一張自定義的表,,保存下常用的系統(tǒng)用戶以及默認(rèn)密碼的HASH值。
2. 將系統(tǒng)中的用戶密碼HASH值與該表中的HASH值比較,,如果相同,,則表明還在使用默認(rèn)值。
注意:在數(shù)據(jù)字典中存儲的密碼是被HASH算法加密過的,,加密后的值不但跟密碼本身有關(guān)還跟用戶名有關(guān),,也就是,如果是不相同的用戶名那么即使是完全相同的密碼,,加密后的HASH值也是不一樣的,。這樣保證了每一個用戶的每一個密碼都有自己獨一無二的HASH值。
在Oracle 11g之前,,加密后的密碼可以從DBA_USERS數(shù)據(jù)字典的PASSWORD字段中獲得,因此可以通過這個字段中存儲的值來做是否是默認(rèn)值的檢查,。但是在11g中,,PASSWORD字段卻不再顯示密碼的內(nèi)容了。
先看一下文檔中對這個字段的描述:
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字段已經(jīng)不再顯示密碼內(nèi)容,,全部都為空,。
那么,如果再去檢查這些用戶是否還在使用默認(rèn)的密碼呢,?
方法一:從SYS.USER$基表中檢查,,在基表的password字段中仍然可以查到HASH后的值。
SQL> SELECT name,password FROM user$ WHERE name='SCOTT';
NAME PASSWORD
------------------------------ ------------------------------
SCOTT F894844C34402B67
方法二:這是推薦的方法,,最簡單的方法,,11g中可以使用的方法,11g提供了新的DBA_USERS_WITH_DEFPWD視圖,,該視圖中包含了所有還在使用默認(rèn)密碼的用戶名,。
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對于安全性的支持力求做到業(yè)界領(lǐng)先,Oracle始終在每個細(xì)節(jié)上進(jìn)步著,。
===================================================================================================================================
查看并修改Oracle用戶的密碼(適用于10g,9i)
本文是數(shù)據(jù)庫版本:9.2.0.5
有時候我們可能不知道一個用戶的密碼,,但是又需要以這個用戶做一些操作,,又不能去修改掉這個用戶的密碼,或者自己干脆忘記密碼了,,想修改自己的密碼,,這個時候,就可以利用一些小竅門,,來完成操作,。 具體操作過程如下: SQL*Plus: Release 9.2.0.5.0 - Production on 星期日 11月 21 13:32:34 2004 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. SQL> connect sys/oracle as sysdba 已連接。 SQL> select username,password from dba_users; USERNAME PASSWORD ------------------------------ ------------------------------ SYS 8A8F025737A9097A SYSTEM 2D594E86F93B17A1 DBSNMP E066D214D5421CCC TOAD A1BA01CF0DD82695 OUTLN 4A3BA55E08595C81 WMSYS 7C9BA362F8314299 已選擇6行,。 SQL> connect system/oracle 已連接,。 SQL> connect sys/oracle as sysdba 已連接。 修改用戶system密碼為manager SQL> alter user system identified by manager; 用戶已更改,。 SQL> select username,password from dba_users; USERNAME PASSWORD ------------------------------ ------------------------------ SYS 8A8F025737A9097A SYSTEM D4DF7931AB130E37 DBSNMP E066D214D5421CCC TOAD A1BA01CF0DD82695 OUTLN 4A3BA55E08595C81 WMSYS 7C9BA362F8314299 已選擇6行,。 SQL> connect system/manager 已連接。 然后此時可以做想要做的任何操作了 SQL> connect sys/oracle as sysdba 已連接,。 修改用戶system密碼為以前的值 SQL> alter user system identified by values '2D594E86F93B17A1'; 用戶已更改,。 SQL> connect system/oracle 已連接。 SQL> connect sys/oracle as sysdba 已連接,。 SQL> connect system/manager ERROR: ORA-01017: invalid username/password; logon denied 警告: 您不再連接到 ORACLE,。 參考:
說明:
oracle是不充許查詢密碼的,也就是說,,不能查看dba_users里password字段(存儲密碼的加密過的字符串)對應(yīng)的密碼明文,。
因為數(shù)據(jù)庫存放的密碼(比如,dba_users里的password字段)是加密的數(shù)據(jù),,所以,,如果是忘記了密碼,只能通過重新初始化密碼: alter user username identified by pwd;
在數(shù)據(jù)字典中存儲的密碼是被HASH算法加密過的,,加密后的值不但跟密碼本身有關(guān)還跟用戶名有關(guān),,也就是,如果是不相同的用戶名那么即使是完全相同的密碼,,加密后的HASH值也是不一樣的,。這樣保證了每一個用戶的每一個密碼都有自己獨一無二的HASH值。
為啥oracle安全性高,,就是他的加密牛X,。你搞別人的密碼干啥。假如你實在要的話,,我記得以前做項目的時候?qū)戇^MD5加密程序,,只要在把你要的加密后的放入其中運行就可以轉(zhuǎn)成真實的?;蛘吣憔驮诰W(wǎng)上下一個破解MD5密碼的生成器吧,。不過我可不能保證一定正確,。 |
|