Oracle中system用户的实际权限

  之前新建了一个数据库,通过pl/sql developer登录,使用的是system用户,身份为SYSDBA,结果报错:insufficient privileges( 权限不足 )。最后只好让sys用户登录后执行grant sysdba to system为system用户赋予sysdba权限。


  这里就有了问题:难道system用户不是默认具有SYSDBA权限的吗?如果不是,为什么以前很多时候,数据库建好后直接就可以用system作为sysdba登录呢?


  首先要了解的是,
在Oracle数据库系统中,用户如果要以特权用户身份(INTERNAL/SYSDBA/SYSOPER)登录Oracle会有两种身份验证的方法:操作系统验证方式(OS)、密码文件验证方式。OS验证方式是指,在登录Oracle时,让操作系统来完成登录用户的权限验证。具体是:安装 Oracle时(注意不是创建Oracle数据库实例时),Oracle数据库服务器所在的操作系统会产生一个用户组(windows中默认是 ORA_DBA),这个组中的用户在登录操作系统后又去登录Oracle时,无论他输入的用户名密码是什么,都能够以sysdba身份登录成功。但是这时 候实际上是以sys用户在登录的,所以登陆成功后以 show user命令查看当前登录的用户时,返回的是sys。


  密码文件验证是指,Oracle通过一个密码文件对登录的用户进行权限验证,这个文件中记录着 sys用户的口令以及其它 特权用户 的用户名/口令,通俗的说就是这个文件中记录了当前具有sysdba权限的用户名及其口令。通常密码文件是 存放在%ORACLE_HOME%\DATABASE目录下,在使用Oracle Instance Manager创建一数据库实例的时侯,Oracle系统会自动创建一个与实例对应的密码文件,文件名为 PWDSID.ORA,其中SID代表相应的Oracle数据库系统标识符。此密码文件是进行初始数据库管理工作的基础。在此之后,管理员也可以根据需 要,使用工具ORAPWD.EXE手工创建密码文件。


  那么这两种验证方式在哪里设置呢?具体在Oracle9i中是%ORACLE_HOME%\ora92\network\admin\sqlnet.ora文件中,有如下的配置:


  SQLNET.AUTHENTICATION_SERVICES = (NONE)  # 这是密码文件验证方式.
  SQLNET.AUTHENTICATION_SERVICES = (NTS)     # 这是OS验证方式.

  说完了验证方式,再说一下sys、system用户的权限。sys用户拥有dba,sysdba,sysoper等角色或权限,是oracle权限最高的 用户,所有oracle的数据字典的基表和视图都存放在sys用户中,登陆时也只能用sysdba、sysoper这两个身份,不能用normal身份。 system用户拥有普通角色权限,只能用normal身份登陆,除非你对它授予了sysdba的系统权限或者syspoer系统权限。


  那这样的话,为什么之前很多时候可以直接用system用户作为syadba登录呢?那时因为,当时Oracle的验证方式是OS方式。而这次因为我登录前恰好改动了sqlnet.ora文件,所以就不能以system用户通过sysdba登录了。

你可能感兴趣的:(oracle,sql,windows,OS,配置管理)