Oracle在11g中对于安全方面进行了很大的改进,比如增加了密码大小写验证,增加了密码复杂度的验证等等,在11g中,Oracle还提供了一个视图,指出那些用户的密码没有被修改过,仍然是数据库默认密码。
这个视图是DBA_USERS_WITH_DEFPWD:
[oracle@bjtest ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on星期二8月31 19:42:27 2010
Copyright (c) 1982, 2009, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select username from dba_users;
USERNAME
------------------------------
SYS
SYSTEM
A
TEST
YANGTK
TEST_TEST
OUTLN
MGMT_VIEW
FLOWS_FILES
MDSYS
ORDSYS
EXFSYS
DBSNMP
WMSYS
APPQOSSYS
APEX_030200
OWBSYS_AUDIT
ORDDATA
CTXSYS
ANONYMOUS
SYSMAN
XDB
ORDPLUGINS
OWBSYS
SI_INFORMTN_SCHEMA
OLAPSYS
ORACLE_OCM
XS$NULL
MDDATA
DIP
APEX_PUBLIC_USER
SPATIAL_CSW_ADMIN_USR
SPATIAL_WFS_ADMIN_USR
已选择33行。
SQL> select username from dba_users_with_defpwd;
USERNAME
------------------------------
DIP
MDSYS
XS$NULL
SPATIAL_WFS_ADMIN_USR
CTXSYS
OLAPSYS
OUTLN
OWBSYS
SPATIAL_CSW_ADMIN_USR
EXFSYS
ORACLE_OCM
DBSNMP
MDDATA
ORDPLUGINS
ORDSYS
APPQOSSYS
ORDDATA
XDB
SI_INFORMTN_SCHEMA
WMSYS
已选择20行。
在视图中列出的20个用户就是Oracle默认密码的用户,如果用户密码被修改,就会从这个视图中消失:
SQL> alter user dbsnmp identified by newpassword;
用户已更改。
SQL> select username from dba_users_with_defpwd;
USERNAME
------------------------------
DIP
XS$NULL
MDSYS
SPATIAL_WFS_ADMIN_USR
OUTLN
CTXSYS
OLAPSYS
SPATIAL_CSW_ADMIN_USR
OWBSYS
ORACLE_OCM
EXFSYS
ORDSYS
ORDPLUGINS
MDDATA
APPQOSSYS
XDB
ORDDATA
WMSYS
SI_INFORMTN_SCHEMA
已选择19行。
而且Oracle并不是简单的监测是否密码被修改,而是检查密码是否修改为别的值,如果新密码和旧密码保持一致,那么即使密码被修改,这个用户仍然在DBA_USERS_WITH_DEFPWD视图中:
SQL> conn / as sysdba已连接。SQL> alter user xdb account unlock;
用户已更改。
SQL> select * from dba_users_with_defpwd where username = 'XDB';
USERNAME
------------------------------
XDB
SQL> conn xdb/change_on_install
ERROR:
ORA-28001: the password has expired
更改xdb的口令新口令:重新键入新口令:口令已更改已连接。SQL> conn xdb/change_on_install已连接。SQL> conn / as sysdba已连接。SQL> select * from dba_users_with_defpwd where username = 'XDB';
USERNAME
------------------------------
XDB
SQL> alter user xdb identified by change_on_install;
用户已更改。
SQL> select * from dba_users_with_defpwd where username = 'XDB';
USERNAME
------------------------------
XDB
SQL> alter user xdb identified by newpassword;
用户已更改。
SQL> select * from dba_users_with_defpwd where username = 'XDB';
未选定行