
在使用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
找个没用的机器,自己试试。




