Restore database user history account password

1. 用户状态

select * from user_astatus_map;

select * from user_astatus_map;
   STATUS# STATUS
---------- --------------------------------
          OPEN
          EXPIRED
          EXPIRED(GRACE)
     4     LOCKED(TIMED)
          LOCKED
          EXPIRED & LOCKED(TIMED)
          EXPIRED(GRACE) & LOCKED(TIMED)
          EXPIRED & LOCKED
         EXPIRED(GRACE) & LOCKED

2.  password_versions

2.1)在oracle 10g, 密码记录在sys.user$.PASSWORD列,其长度为16字符,且不区分大小写;

2.2)在oracle 11g版本后,其复杂度得到了加强,将密码同时写入到sys.user$.spare4列,并且sys.user$.spare4对大小敏感。

2.3)dba_users.password_versions的优先级大于sec_case_sensitive_logon参数,11g默认为true。

3. 下面通过语句进行刷密码操作

3.1)创建序列

 start  nomaxvalue nocycle nocache;

3.2)创建操作记录表

create table tb_refpwd_log(
  id number not null,                        -- 引用seq_refpwd.nextval
  oper_time date,                            -- 记录操作时间
  oper_command )                -- 记录操作命令内容
);

3.3)执行语句

declare
  v_datetime ) := to_char(sysdate, 'yyyymmddHH24MI');
  v_tbname   ) := trim(concat('tb_userpwd_', v_datetime)); -- 备份表名称
  v_pf_sql   ) := 'create profile temp_profile limit PASSWORD_REUSE_MAX UNLIMITED PASSWORD_REUSE_TIME UNLIMITED'; -- 构造创建profile语句
  v_sql      );
  TYPE RECORD_TYPE_USERS IS RECORD(
    v_username sys.user$.name%TYPE,
    v_user_pwd ),
    v_profile  ),
    v_status   sys.user$.ASTATUS%TYPE);
  user_rec RECORD_TYPE_USERS;
  cursor c_pwd_cursor is
    select t2.name,
           case trim(t1.password_versions)
             when '10G' then
              t2.password
             else
              nvl(t2.spare4, t2.password)
           end,
           t1.profile,
           t2.astatus
      from sys.dba_users t1, sys.user$ t2
     where t1.user_id = t2.user#
       , , , , , );
  invalid_option EXCEPTION;

begin
  -- select to_char(sysdate, 'yyyymmddHH24MI') into v_datetime from dual;
  -- select trim(concat('tb_userpwd_',v_datetime)) into v_tbname from dual;
  select 'create table ' || v_tbname ||
         ' as select name,type#,password,datats#,tempts#,ctime,ptime,exptime,ltime,resource$,astatus,lcount,spare4 from sys.user$ where astatus <> 9'
    into v_sql
    from dual;

  open c_pwd_cursor;
  fetch c_pwd_cursor
    into user_rec;
   then
    -- 1. create unlimited temporary profile
    execute immediate v_pf_sql;
      IF SQL%NOTFOUND THEN
        RAISE invalid_option;
      end IF;
    -- 2. backup user$ tables
    execute immediate v_sql;
      IF SQL%NOTFOUND THEN
        RAISE invalid_option;
      end IF;
  end if;
  while c_pwd_cursor%FOUND LOOP
    -- 3. reflash user password
    /*
    dbms_output.put_line('alter user ' || user_rec.v_username ||
                         ' profile temp_profile');
    dbms_output.put_line('alter user ' || user_rec.v_username ||
                         ' identified by values ' || chr(39) ||
                         user_rec.v_user_pwd || chr(39));
    dbms_output.put_line('alter user ' || user_rec.v_username ||
                         ' profile ' || user_rec.v_profile);
    */
    execute immediate 'alter user ' || user_rec.v_username ||
                      ' profile temp_profile';
    execute immediate 'alter user ' || user_rec.v_username ||
                      ) ||
                      user_rec.v_user_pwd );
    ) ));
    execute immediate 'alter user ' || user_rec.v_username || ' profile ' ||
                      user_rec.v_profile;
    fetch c_pwd_cursor
      into user_rec;
  end loop;
  -- 4. delete temporary profile
  execute immediate 'drop profile temp_profile cascade';
  insert into tb_refpwd_log(id, oper_time, oper_command) values(seq_refpwd.nextval,v_datetime,'drop profile temp_profile cascade');
  commit;
  close c_pwd_cursor;
  EXCEPTION
    when invalid_option then
      , v_datetime, 'invalid opertaion, please check.');
    when others then
      null;
end;
/

4. 结果确认

) cnt
  from (select t1.name, t1.password, t1.spare4
          from sys.user$ t1

        minus
        select t2.name, t2.password, t2.spare4
          from &v_datetime t2
         );

select username, account_status, lock_date, expiry_date, created, profile, password_versions,default_tablespace, temporary_tablespace from dba_users;

Oracle rdbms Brush password的更多相关文章

  1. 由ORACLE:ORA-28001: the password has expired(密码过期)引起ODI资料库连接失败

    今天,连接ODI,出现下面的错误 oracle.odi.core.config.WorkRepositoryResourceFailureException: ODI-10182: 资料档案库访问期间 ...

  2. oracle:the password has expired

    今天在用dbvisualizer登录数据库的时候,报了the password has expired的错误,于是上网查了一下原因,是因为数据库密码过期了,因为默认的是180天. 解决方法: 1)用系 ...

  3. [ORACLE]ORA-28002 The password will expire within 7 days.将不能登录系统

    错误“ORA-28002 The password will expire within 7 days.  Cannot logon to the database“当在进程调度器上运行AE程序可能遇 ...

  4. Oracle密码过期the password has expired解决办法

    oracle 出现the password has expired这个问题,今天突然发现项目访问不了,一查发现用不了,也登不进去, 这个问题由是Oracle11g密码过期的原因导致的 调试Web项目的 ...

  5. ORACLE错误:ORA-28001: the password has expired解决方法

    Oracle提示错误消息ORA-28001: the password has expired,是由于Oracle11G的新特性所致, Oracle11G创建用户时缺省密码过期限制是180天(即6个月 ...

  6. Oracle 11g静默安装简明版

    环境:RHEL 6.5 + Oracle 11.2.0.4 1. 初步处理应答文件 2. 静默安装软件 3. 静默安装监听 4. 静默dbca建库 说明: 本文默认安装软件前的步骤已经设置完毕 如果没 ...

  7. vmware workstation9.0 RHEL5.8 oracle 10g RAC安装指南及问题总结

    一,虚拟机规划 (1)虚拟机:添加三块网卡 eth0 eth1 eth2 ,分别用于内网,心跳,外网RAC1 内网:192.168.1.10/24  心跳:192.168.2.10/24  VIP:1 ...

  8. 使用BBED模拟Oracle数据库坏块

    BBED(OracleBlockBrowerandEDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢 ...

  9. Oracle EBS R12 (12.1.3) Installation Linux(64 bit)

    Oracle EBS R12 (12.1.3) Installation Linux(64 bit) Contents Objective. 3 1 Download & Unzip. 3 D ...

随机推荐

  1. PowerDesigner 创建表格及导出SQL语句

    PowerDesigner 创建表格及导出SQL语句   目的:提高数据库创建表格效率 测试数据库:orcale 1.新建物理模型. 右键点击workplace,new一个物理模型并指定数据库. 2. ...

  2. t3用户-角色-权限hibernate经典配置

    用户-角色-权限hibernate经典配置. 既然有人问起,我就写下说明吧.在文章中间的配置文件那里.权当回忆一下,也帮助更多人.这是以前学校时写的,没有注释.都是贴的代码笔记.看到的莫要见怪.欢迎学 ...

  3. docker 第一次学习(一)--安装以及相关命令

    转自:https://www.jianshu.com/p/c69a2a3b4c7a https://docs.docker.com/ http://www.dockerinfo.net/documen ...

  4. [android] 新闻客户端主界面部分

    当我们使用activity加fragment的时候,每个界面都要建立一个fragment,每个fragment里面都要重写onCreate(),onCreateView(),onActivityCre ...

  5. 使用Java对字符串进行升序排序

    Java对字符串的很多API和功能是JavaWeb能广泛发展的基础,下面是一道经典的字符串操作题,需要边查JAVASE的API对每个步骤进行操作. 题目:给一个字符串,"34 12 -8 0 ...

  6. CPU单核多核区别【转载】

    CPU个数.CPU核心数.CPU线程数 我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级.CPU从早期的单核,发展到现在的双核,多核.CPU除了核心数之外,还有线程数之 ...

  7. 服务注册中心Eureka vs Zookeeper vs Consul

    前言 在现在云计算和大数据快速发展的今天,业务快速发展和变化.我们以前的单一应用难以应对这种快速的变化, 因此我们需要将以前单一的大应用不断进行差分,分成若干微小的应用或者服务,这就是微服务的思想.但 ...

  8. mysql 添加用户

    CREATE USER 'user_name'@'%' IDENTIFIED BY '12345';      -- %  代表所有ip可以访问 GRANT all ON *.* TO 'user_n ...

  9. js-ES6学习笔记-Generator函数

    1.Generator 函数是 ES6 提供的一种异步编程解决方案.形式上,Generator 函数是一个普通函数,但是有两个特征.一是,function关键字与函数名之间有一个星号:二是,函数体内部 ...

  10. [转]SQL SERVER 2008 登陆失败(SQL和windows都没有对应的权限)

    转自:http://www.cnblogs.com/zerocc/p/3425431.html 昨天在测试一些权限今天早上来就发现SQL SERVER 登陆不上去,报错为: 用户登陆失败:消息 184 ...