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

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

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

    有时候我们可能不知道一个用户的密码,但是又需要以这个用户做一些操作,又不能去修改掉这个用户的密码,或者自己干脆忘记密码了,想修改自己的密码,这个时候,就可以利用一些小窍门,来完成操作。
   还有,在数据库安全性检查中有一项首先要完成的工作,就是检查数据库中的用户密码是否还仍然保留着默认值,比如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)

 

本文是数据库版本: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字段(存储密码的加密过的字符串)对应的密码明文。

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

alter user username identified by pwd;


 

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

 

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

 
<think>好的,我需要帮助用户理解Oracle中的dba_usersdba_profiles这两个数据字典视图的每个字段含义。用户之前遇到了ORA-28001错误,现在想深入了解这两个视图的结构,可能是为了更彻底地解决密码策略的问题,或者进行其他用户管理操作。 首先,我要确认用户的需求。他们需要每个字段的中文解释,可能需要详细但清晰的说明。之前的问题涉及到用户配置文件和密码策略,所以用户可能希望了解这些视图的结构以便更好地管理用户和策略。 接下来,我需要回忆或查阅dba_usersdba_profiles的各个字段。对于dba_users,常见的字段包括用户名、用户ID、密码哈希、账户状态、默认表空间、临时表空间、创建日期、profile名称、锁定日期、过期日期、外部名称、密码版本、编辑、认证类型、代理用户、通用角色等。每个字段的作用需要简要说明,尤其是与用户管理相关的部分,比如ACCOUNT_STATUS可能的值如OPEN、EXPIRED、LOCKED等。 然后是dba_profiles,这个视图存储了所有profile的资源限制。字段可能包括profile名称、资源类型(密码或内核资源)、资源名称、资源限制,以及是否继承自DEFAULT profile。需要解释每个资源名称对应的策略,比如PASSWORD_LIFE_TIME是密码有效期,FAILED_LOGIN_ATTEMPTS是允许的失败登录次数等。 需要确保解释准确,且用用户容易理解的语言,避免过于技术化的术语,但也要保持专业性。同时,可能需要指出哪些字段与之前的ORA-28001错误相关,比如PASSWORD_LIFE_TIME和FAILED_LOGIN_ATTEMPTS,帮助用户连接之前的错误和当前的学习内容。 另外,用户可能需要知道如何查询这些视图,是否有权限问题,比如是否需要DBA权限才能访问这些视图。如果有必要,可以简要提到权限要求,但用户之前已经查询过这些视图,所以可能已经具备权限。 最后,总结这两个视图的作用,强调它们在用户管理和安全策略中的重要性,帮助用户建立整体的理解。</think>以下是 **Oracle 数据库**中 `DBA_USERS` 和 `DBA_PROFILES` 视图的字段含义详解: --- ### **1. `DBA_USERS` 用户信息视图** `DBA_USERS` 存储了数据库中所有用户的详细信息,各字段含义如下: | 字段名 | 数据类型 | 说明 | |-----------------------|------------|----------------------------------------------------------------------| | **USERNAME** | VARCHAR2 | 用户名(唯一标识)。 | | **USER_ID** | NUMBER | 用户的唯一数字ID。 | | **PASSWORD** | VARCHAR2 | 用户密码哈希值(Oracle 12c+ 默认不显示,需查询 `USER$` 表)。 | | **ACCOUNT_STATUS** | VARCHAR2 | 账户状态:`OPEN`(正常)、`EXPIRED`(密码过期)、`LOCKED`(锁定)等。| | **LOCK_DATE** | DATE | 账户被锁定的日期(若状态为 `LOCKED`)。 | | **EXPIRY_DATE** | DATE | 密码过期日期(由 `PASSWORD_LIFE_TIME` 计算)。 | | **DEFAULT_TABLESPACE**| VARCHAR2 | 用户的默认表空间(存储用户对象的默认位置)。 | | **TEMPORARY_TABLESPACE**| VARCHAR2 | 用户的临时表空间(用于排序等临时操作)。 | | **CREATED** | DATE | 用户的创建日期。 | | **PROFILE** | VARCHAR2 | 用户关联的 Profile 名称(用于密码和资源限制)。 | | **EXTERNAL_NAME** | VARCHAR2 | 外部用户标识(如 LDAP 或操作系统认证用户)。 | | **PASSWORD_VERSIONS** | VARCHAR2 | 密码的哈希算法版本(如 `10g 11g 12c`,支持多种算法兼容)。 | | **EDITIONS_ENABLED** | VARCHAR2 | 是否启用 Edition-Based Redefinition(EBR)功能。 | | **AUTHENTICATION_TYPE**| VARCHAR2 | 认证类型:`PASSWORD`、`EXTERNAL`、`GLOBAL` 等。 | | **PROXY_ONLY_CONNECT**| VARCHAR2 | 是否仅允许代理连接(`YES`/`NO`)。 | --- ### **2. `DBA_PROFILES` 配置策略视图** `DBA_PROFILES` 存储了所有 Profile 的资源限制规则(密码策略和资源限制),各字段含义如下: | 字段名 | 数据类型 | 说明 | |--------------------|------------|----------------------------------------------------------------------| | **PROFILE** | VARCHAR2 | Profile 的名称(如 `DEFAULT`)。 | | **RESOURCE_TYPE** | VARCHAR2 | 资源类型:`PASSWORD`(密码策略)或 `KERNEL`(CPU、会话等资源限制)。 | | **RESOURCE_NAME** | VARCHAR2 | 资源或策略的名称(如 `PASSWORD_LIFE_TIME`)。 | | **RESOURCE_LIMIT** | VARCHAR2 | 资源限制值:具体数值、`UNLIMITED`(无限制)或 `DEFAULT`(继承默认值)。| | **COMMON** | VARCHAR2 | 是否为公共 Profile(Oracle 18c+ 引入,`YES`/`NO`)。 | | **INHERITED** | VARCHAR2 | 是否从 `DEFAULT` Profile 继承(`YES`/`NO`)。 | --- ### **3. 关键资源名称(RESOURCE_NAME)详解** #### **密码策略(RESOURCE_TYPE = 'PASSWORD')** | 资源名称 | 说明 | |----------------------------|----------------------------------------------------------------------| | **FAILED_LOGIN_ATTEMPTS** | 允许的连续失败登录次数,超过后账户锁定。 | | **PASSWORD_LIFE_TIME** | 密码有效期(天数),超过后密码过期。 | | **PASSWORD_GRACE_TIME** | 密码过期后的宽限期(天数),宽限期内需修改密码。 | | **PASSWORD_REUSE_TIME** | 密码可重复使用的时间间隔(天数)。 | | **PASSWORD_REUSE_MAX** | 密码可重复使用前必须修改的次数。 | | **PASSWORD_LOCK_TIME** | 账户因登录失败被锁定的天数(超过后自动解锁)。 | | **PASSWORD_VERIFY_FUNCTION**| 自定义密码复杂度校验函数。 | #### **资源限制(RESOURCE_TYPE = 'KERNEL')** | 资源名称 | 说明 | |--------------------------|--------------------------------------------------------------------| | **SESSIONS_PER_USER** | 单个用户允许的最大发会话数。 | | **CPU_PER_SESSION** | 单个会话的最大 CPU 时间(百分之一秒)。 | | **CPU_PER_CALL** | 单次 SQL 调用的最大 CPU 时间。 | | **CONNECT_TIME** | 会话的最大连接时间(分钟)。 | | **IDLE_TIME** | 会话空闲超时时间(分钟)。 | --- ### **4. 使用示例** #### 查询用户详细信息: ```sql SELECT username, account_status, expiry_date, profile FROM dba_users WHERE username = 'SITS'; ``` #### 查询 Profile 的密码策略: ```sql SELECT resource_name, resource_limit FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_type = 'PASSWORD'; ``` --- ### **5. 注意事项** - **权限要求**:查询 `DBA_USERS` 和 `DBA_PROFILES` 需要 `SELECT_CATALOG_ROLE` 或 `DBA` 角色权限。 - **默认策略**:`DEFAULT` Profile 的密码策略可能导致密码过期(如 `PASSWORD_LIFE_TIME` 默认 180 天)。 - **安全建议**:合理配置 Profile 以平衡安全性与用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值