查看并修改Oracle用户的密码【oracle不能查看dba_users里password字段(存储密码的加密过的字符串)对应的密码明文】

来源:互联网 发布:好看的桌面壁纸 知乎 编辑:程序博客网 时间:2024/06/07 19:42

查看并修改Oracle用户的密码(适用于11g)

上一篇 /下一篇  2010-11-10 10:56:59 / 个人分类:Oracle

查看( 784 ) /评论( 0 ) / 评分( 0 / 0 )
如果你的数据库版本低于11g参考http://www.51testing.com/index.php?uid-364865-action-viewspace-itemid-222982
    有时候我们可能不知道一个用户的密码,但是又需要以这个用户做一些操作,又不能去修改掉这个用户的密码,或者自己干脆忘记密码了,想修改自己的密码,这个时候,就可以利用一些小窍门,来完成操作。
   还有,在数据库安全性检查中有一项首先要完成的工作,就是检查数据库中的用户密码是否还仍然保留着默认值,比如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始终在每个细节上进步着。
 
===================================================================================================================================
 

查看并修改Oracle用户的密码(适用于10g,9i)

 

如果你的数据库版本是11g参考http://www.51testing.com/?uid-364865-action-viewspace-itemid-222983
本文是数据库版本: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。

摘自:http://blog.chinaunix.net/u/19673/showart_143790.html
 
 
参考:
轻松搞定Oracle用户密码修改
 
 
说明:
 
oracle是不充许查询密码的,也就是说,不能查看dba_users里password字段(存储密码的加密过的字符串)对应的密码明文。

因为数据库存放的密码(比如,dba_users里的password字段)是加密的数据,所以,如果是忘记了密码,只能通过重新初始化密码:

alter user username identified by pwd;


 

在数据字典中存储的密码是被HASH算法加密过的,加密后的值不但跟密码本身有关还跟用户名有关,也就是,如果是不相同的用户名那么即使是完全相同的密码,加密后的HASH值也是不一样的。这样保证了每一个用户的每一个密码都有自己独一无二的HASH值。

 

为啥oracle安全性高,就是他的加密牛X。你搞别人的密码干啥。假如你实在要的话,我记得以前做项目的时候写过MD5加密程序,只要在把你要的加密后的放入其中运行就可以转成真实的。或者你就在网上下一个破解MD5密码的生成器吧。不过我可不能保证一定正确。

 
0 0
原创粉丝点击