发布网友 发布时间:2022-04-23 16:35
共1个回答
热心网友 时间:2022-04-08 21:28
改用户名的用处至于改名字的用处嘛,在这样一种情景下非常有用.假如某个公司给每个员工一个账户,用户名就是你的英文名.当某个员工arwen要离职了,那就要删除掉用户arwen了.但是我们知道oracle中用户与此用户下面创建的对象是完全绑定到一起的,而不像sql server中表等对象是可以和用户完全分开.这样的话你一删掉用户arwen那下面的数据全没了.假如我们需要那些数据咋整呢,最容易想到的是把所有数据先导出,然后再导入到某个用户下面.但这样比较麻烦.所以如果能改名字就更好点了.接着用上面的例子.假如又来了新员工,weiwenhp.他是接arwen的班的.所以他很需要用户arwen下面的数据.此时就把用户arwen改成用户weiwenhp.我们登陆数据库时,数据库系统会判断我们的用户名和密码正确不,那我们自然想到这些信息肯定保存在数据库里面哪个地方,肯定会有一个啥保存用户信息的表.没错,所以用户信息保存在表user$中.select * from user$用这个sql一查你会看到所有用户名和密码,还有其他一些信息.不过用户名都是加密的.所以即使是管理员也看不到任何用户的密码,只能改用户的密码.那肯定想,用户名和密码在这那我在这里把名字改下就行了啊.实际上改名就真这么做.select user#, name from user$ where name = 'ARWEN'; --先瞧下arwen的信息,其中user#就是一个序列号,相当于身份证号吧,假如这里是250update user$ set name = 'WEIWENHP' where user# = 250; --于是用户名就改好了啊.当然是update语句就记得再commit提交下啊.还要做的工作我人知道要是改了密码的话马上就生效能用的啊,改名字了咋就不成了呢.我们知道数据库中很重要的一点是要保证数据一致性,某个地方的数据更改了,相关的地方也得跟着改才好.那这里肯定是因为登陆时读取的用户信息还没有更新.有数据不一致性的情况出现.你可能会想到有时我们用alter更改一些参数信息得重启数据库才能生效.于是你就想不会我改了名还得重启数据库.这也太恐怖了吧.实际上不用重启数据库拉,你这样强制更新下.alter system checkpoint;alter system flush shared_pool;你再次登陆就发现可以登陆了啊.而之前的arwen用户就登不了啊.