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.
 

免责声明:文章转载自《Oracle怎么更改用户名》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android O : DNS列表获取及IPv4/IPv6优先级修改QueryWrapper获取另一个表的字段下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

PHP基础封装简单的MysqliHelper类

MysqliHelper.class.php 1: <?php 2: 3: /** 4: * MysqliHelper 5: * [面向对象的MysqliHelper的简单封装] 6: */ 7: class MysqliHelper 8: { 9: private static $mysqli; 10: private stat...

解决git本地代码推服务器每次都要输入用户名和密码的问题

今天学习使用GitHub时,在本地创建了仓库关联到远程服务器后,发现每次提交代码都需要输入用户名和密码,让人相当难受。于是遍寻方法,想要一劳永逸,功夫不负有心人啊,终于让我找到一个简便的方法,一步解决这个问题~1 在命令行输入git config --global credential.helper store这条指令  2 这条指令会在隐藏文件gitco...

ORACLE物化视图实体化试图(Materialized View)介绍

来自http://blog.csdn.net/outget1/article/details/5291365 实体化视图概述 Oracle的实体化视图提供了强大的功能,可以用在不同的环境中。在不同的环境中,实体化视图的作用也不相同。数据仓库中的实体化视图主要用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操...

oracle高级部分

回顾 多表关联查询的方式内连接 根据AB表关联的条件进行过滤查询,只保留满足条件数据 Select * from a,b where a.xxx=b.xxx;     Select * from a inner join b on a.xxx=b.xxxx     inner join c on a.xxxx=c.xxxx 外连接 左外连接 以左表为...

企业管理器(OEM)介绍: Grid Control 和 Database Control

Oracle 自10g 以后,企业管理器(Oracle Enterprise Manager:OEM)变成了网页形式。 OEM 分两种:Grid Control(网格控制) 和 Database Control(数据库控制)。  Grid Control 是具有完整功能的全企业Oracle 生态系统管理工具。  Database Control是可以只作...

解读SQL 内存数据库的细节

相信大家对内存数据库的 概念并不陌生,之前园子里也有多位大牛介绍过SQL内存数据库的创建方法,我曾仔细 拜读过,有了大致了解,不过仍有很多细节不清晰,比如: (1)内存数据库是把整个数据库放到内存中的吗? (2)数据都在内存里面,那宕机或者断电了,数据不是没有了吗? (3)据在内存是怎么存放的,还是按照页的方式吗,一行的大小有限制吗? (4)内存数据...