• Oracle怎么更改用户名


     
    Oracle怎么更改用户名2012-10-22
     
    很多人都以为oracle可以很容易的改密码,但不能改用户名字.实际上名字也可以改的.只不过改起来有点麻烦.
     
    改用户名的用处
    至于改名字的用处嘛,在这样一种情景下非常有用.假如某个公司给每个员工一个账户,用户名就是你的英文名.当某个员工arwen要离职了,那就要删除掉用户arwen了.但是我们知道oracle中用户与此用户下面创建的对象是完全绑定到一起的,而不像sql server中表等对象是可以和用户完全分开.这样的话你一删掉用户arwen那下面的数据全没了.假如我们需要那些数据咋整呢,最容易想到的是把所有数据先导出,然后再导入到某个用户下面.但这样比较麻烦.所以如果能改名字就更好点了.  www.2cto.com  
     
    怎么改用户名
    接着用上面的例子.假如又来了新员工,weiwenhp.他是接arwen的班的.所以他很需要用户arwen下面的数据.此时就把用户arwen改成用户weiwenhp.我们登陆数据库时,数据库系统会判断我们的用户名和密码正确不,那我们自然想到这些信息肯定保存在数据库里面哪个地方,肯定会有一个啥保存用户信息的表.没错,所以用户信息保存在表user$中.
     
    select * from user$
      www.2cto.com  
    用这个sql一查你会看到所有用户名和密码,还有其他一些信息.不过用户名都是加密的.所以即使是管理员也看不到任何用户的密码,只能改用户的密码.
    那肯定想,用户名和密码在这那我在这里把名字改下就行了啊.实际上改名就真这么做.
     
    select user#, name from user$ where name = 'ARWEN';     --先瞧下arwen的信息,其中user#就是一个序列号,相当于身份证号吧,假如这里是250
     
    update user$ set name = 'WEIWENHP' where user# = 250;     --于是用户名就改好了啊.当然是update语句就记得再commit提交下啊.
     
    还要做的工作
    当上面那样改好名字后你就兴高采烈的想去登陆下试试,瞧瞧改了用户名后真能登陆不.结果一登发现登不了.而用之前的帐户arwen还能登.这时你就傻眼了.这是咋回事啊?
     
    我人知道要是改了密码的话马上就生效能用的啊,改名字了咋就不成了呢.
     
    我们知道数据库中很重要的一点是要保证数据一致性,某个地方的数据更改了,相关的地方也得跟着改才好.那这里肯定是因为登陆时读取的用户信息还没有更新.有数据不一致性的情况出现.你可能会想到有时我们用alter更改一些参数信息得重启数据库才能生效.于是你就想不会我改了名还得重启数据库.这也太恐怖了吧.
     
    实际上不用重启数据库拉,你这样强制更新下.
     
    alter system checkpoint;
     
    alter system flush shared_pool;    
     
    你再次登陆就发现可以登陆了啊.而之前的arwen用户就登不了啊.
     
    不过像上面这样改用户名不太方便,估计很少有DBA去这样做吧.因为出现要改用户名的场景确实不多.而且就算要改先导出再导入也能做到.
     
    想干坏事明文显示密码
    刚上面你发现用户名和密码都在一个表中,而密码都是加密后的密文,你于是就想我能不能想办法给整成明文.这样就可以瞧见别人密码了,方便干啥坏事啊.于是你就想用改名字相同的做法
      www.2cto.com  
    update user$ set password = 'abc' where user# = 250;
     
    alter system checkpoin;
     
    alter system flush shared_pool;
     
    select * from user$ where name = 'arwen' -- 此时你发现密码竟然真变成明文了,abc.于是你可乐坏了
    于是你迫不及待的想登陆下看真能用不.
     
    结果让你很是沮丧,竟然登不了.而且用户arwen原来的密码也报废了.于是只能乖乖的用alter再来改下.
      www.2cto.com  
    alter user arwen identified by abc;           --这样改下就能登了.
     
    改成明文后不能登,但改的时候又没报错.不知道oracle背后是咋整的.我觉得嘛按道理应该改表user$中的密码时就应该提示说不能改才比较好呢.
     
    哎不过反正也没哪个管理员真会闲得蛋痛去干把密码明文显示的无聊事吧.所以咋整也无所谓了.
    我用的是oracle 11gr1 .不知道早期啥oracle的版本能真的把密码改成明文而又能登陆不.
     
    *********************************
    oracle更改用户名
     
    author: skate
    time:   2009/04/01
     
     
    更改oracle的用户名
     
    oracle版本: oracle10g
     
    以前都是都该oracle用户的属性信息,如密码等什么的,今天就来把用户名给改了。
    今天也是遇到一个需求,要导入一个用户的新数据,但还要保留原有用户。以前本人
     确实没有听说过可以更改用户名的,今天就来修改一下
     
    查询要更改的用户名
     
    SQL> select user#,name,password from user$ where name ='TICKETS';
         USER# NAME                           PASSWORD
    ---------- ------------------------------ ------------------------------
            78 TICKETS                        21EDA78F89D6FACD
     
    更改用户名
    SQL> update  user$ set name='TICKETS_BAK' where user#=78;
    1 row updated.
    SQL> commit;
    Commit complete.
     
    再创建一个同样的用户名
    SQL> create user tickets identified by "123456"
      2  default tablespace yytickets
      3  temporary tablespace temp;
    create user tickets identified by "123456"
                *
    ERROR at line 1:
    ORA-01920: user name 'TICKETS' conflicts with another user or role name
     
    提示用户冲突!!
     
    SQL> alter system checkpoint;    ----强制写入数据文件
    System altered.
    SQL> alter system flush shared_pool;  ----清楚缓存数据字典信息,强制oracle读实际数据(即更改后的数据)
    System altered.
     
    再创建相同的用户
    SQL> create user tickets identified by "123456"
      2  default tablespace yytickets
      3  temporary tablespace temp;
    User created.
    SQL> grant connect,resource to tickets;
    Grant succeeded.
    SQL> commit;
    Commit complete.
     
  • 相关阅读:
    springboot与微信开发(一)
    使用springboot+layim+websocket实现webim
    使用springboot+layim+websocket实现webim
    Spring boot WebSocket 注入失败
    使用spring boot +WebSocket的那些坑
    Scrapy 问题锦集(后边继续更新)
    mac安装并创建Scrapy项目
    mac 安装MySQL-python的坑
    IDEA/Pycharm文件头注释模板
    工作用到的正则及测试工具
  • 原文地址:https://www.cnblogs.com/huapox/p/3516057.html
Copyright © 2020-2023  润新知