暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

谁是Oracle中的老大?

InDataBase 2021-04-26
321

在使用Oracle数据库时,一般都要先建一个属于自己的用户,然后在这个用户下创建对象,如:表、视图、索引等。


那么创建用户时,你用哪个用户登录的系统呢?


一般常用的使用系统默认创建的system用户,或者使用事前创建好的、有相关权限的管理员用户。从这里看,system是管理员,可以创建新用户,也可以创建相关对象,似乎权限很大。


那么他是Oracle中的老大吗?

答案是否定的。


在Oracle中真正的老大叫:sys。


sys与system和很大的区别,其主要的原因我觉得就是他们存放的位置导致的。


system存放在数据文件中,而sys存放在密码文件中,游离在系统外。


由于system存放在数据文件中,要获取其信息的前提就是数据库是正常开启的。因为只有这样,system的信息才能通过实例进行访问。


而sys存放在密码中,密码文件的读取不需要通过实例。这就使得sys用户信息不依赖于实例的状态。

所以他们第一个主要的区别就是sys可以对实例进行启停,而system不能。


通过以上查询我们可以看出,

system的本质其实与创建的用户是一致的,通过赋予不同的角色和权限,让其有了对应的权限。

而sys则是完全权限,没有角色。


sys不需要密码?

我们一般连入sys时,通常使用 conn as sysdba即可,没有输入密码的动作。

既然sys是老大,老大还不用密码,这是不是很矛盾?


这个不矛盾,只是理念上的问题。

Oracle把的访问安全交给了操作系统,即如果你能登录操作系统,便可进入整个数据库。

所以不要轻易叫操作系统密码交给陌生人。


当然,以上说的是本地登录,如果是远程登录数据库的sys用户,还是需要密码的。

而密码的信息存放在密码文件中。

可以通过orapwd创建密码文件,具体命令如下:

prapwd file=PWDoracle.ora password=b;


创建好密码文件后,变可以在远程登录sys用户,当然也需要在sqlnet.ora中配置访问权限。


sys存在于密码文件中,system存在于数据库文件中,那么数据文件中真的没有sys吗?

答案是:有,只是一般很少用到。

alter system set O7_DICTIONARY_ACCESSIBILITY=true scope=spfile;

startup force;

alter user sys identified by a;

conn sys/a

找个没用的机器,自己试试。

文章转载自InDataBase,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论