天天看點

system sys,sysoper sysdba 的差別

--=====================================

-- system sys,sysoper sysdba 的差別

    Oracle 中sys,system帳戶以及登陸時的normal,sysoper,sysdba是經常容易混淆的幾個概念,下面詳細講述了

這幾個的差別。

一、sys,system帳戶

    當Oracle 資料庫安裝完畢後,系統會自動建立兩個帳戶如下:

    sys     :預設密碼為CHANGE_ON_INSTALL ,且被授予DBA角色

    system  :預設密碼為MANAGER,且被授予DBA角色

    下面具體描述sys與system帳戶

    sys :這個帳戶相當于SQL server中的sa帳戶,或者說Xp系統中的administrator,或Linux系統中的root帳戶 ,是個超級帳戶,擁有的

        權限最大,可以完成資料庫的所有管理任務。Oracle中全部的基表,視圖等都是以sys架構存儲在資料字典中,類似于SQL server中

        的master資料庫,存儲了所有最原始最基本最關鍵的系統結構,資料等。是以所有以sys架構的對象不允許使用者或資料庫管理者修改

        ,也不建議建立sys架構的對象。

    system :該帳戶除了不能完成備份恢複,以及更新之外的資料庫所有管理任務,通常用來建立一些用于檢視管理資訊的表或視圖,以及

        一些被不同Oracle資料庫選項和工具使用的内部表或内部視圖。同樣也不建議使用system架構來建立一些與管理無關的表或視圖。

        --如下使用system連接配接rman時提示權限不夠,而sys帳戶則可以正常連接配接

        RMAN> connect target system/redhat@orcl   --使用system帳戶連接配接失敗

        RMAN-00571: ===========================================================

        RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

        ORA-01031: insufficient privileges

        RMAN> connect target sys/redhat@orcl      --使用sys帳戶連接配接成功

        connected to target database: ORCL (DBID=1261365217)

    注:sys與system兩個帳戶都屬于dba角色,但是兩者擁有不同的權限,sys擁有更多的權限。   

        system@ORCL> grant sysoper to usr1;  --對于特殊權限system不能夠授予使用者

        grant sysoper to usr1

        *

        ERROR at line 1:

        system@ORCL> conn / as sysdba

        Connected.

        sys@ORCL> grant sysoper to usr1;     --sys使用者則可以完成上面的授權操作

        Grant succeeded.

二、Sysoper Sysdba

    sysoper權限能夠執行下列操作

        startup

        shutdown

        create spfile

        alter database [mount | open | close | dismount]

        alter [database | tablespace] [begin | end] backup

        alter database recover

        restricted session

    sysdba權限

        除了能執行上述所有指令之外,還能建立資料庫,删除資料庫,資料庫日志歸檔,執行不完全恢複,

        以及建立其它的sysoper和sysdba使用者

    SQL> select * from system_privilege_map where name like '%SYS%';

     PRIVILEGE NAME                                       PROPERTY

    ---------- ---------------------------------------- ----------

            -3 ALTER SYSTEM                                      0

            -4 AUDIT SYSTEM                                      0

           -83 SYSDBA                                            0

           -84 SYSOPER                                           0

    下面的連結是兩者不同的權限說明    

    http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/dba.htm#sthref137

        The manner in which you are authorized to use these privileges depends upon the method of

    authentication that you use.When you connect with SYSDBA or SYSOPER privileges, you connect with

    a default schema, not with the schema that is generally associated with your username. For

    SYSDBA this schema is SYS; for SYSOPER the schema is PUBLIC.

    --兩者的schema不同

        SQL> show user

        USER is "SYS"

        SQL> conn / as sysoper

        USER is "PUBLIC"

    在使用OEM登陸時,還有一種登陸時角色的選擇則是normal,這個是對所有普通使用者而言,登陸後其schema是自身

    --檢視密碼檔案視圖,可以得到哪些使用者為sysdba,哪些使用者為sysoper

        SQL> select * from v$pwfile_users;

        USERNAME                       SYSDB SYSOP

        ------------------------------ ----- -----

        SYS                            TRUE  TRUE

        SCOTT                          TRUE  FALSE

        USR1                           FALSE TRUE

    --下面示範了使用不同的角色來登陸

        SQL> conn scott/tiger@orcl as sysdba

        SQL> show user;     --盡管登陸的帳戶是scott,但執行show user顯示的是sys

        SQL> conn scott/tiger@orcl as sysoper  /*scott的sysop列為false*/

        ERROR:

        Warning: You are no longer connected to ORACLE.

        SQL> conn usr1/usr1@orcl as sysdba

        SQL> conn usr1/usr1 as sysoper

        SQL> show user;    --登陸的帳戶是usr1,執行show user顯示的是public

        sys@ORCL> select * from dba_roles where role like 'SYS%'; --不存在這兩個角色

        no rows selected

    --下面示範sysdba與sysoper都可以用來啟動資料庫

        idle> conn scott/tiger as sysdba

        Connected to an idle instance.

        idle> startup

        idle> conn usr1/usr1 as sysoper

        idle> startup  

    總結:

        sysoper與sysdba不是角色,DBA角色也不包含這兩種權限。

        這是兩種用于完成資料庫管理任務的特殊權限,如資料庫建立,執行個體啟動、關閉等

        這兩個權限獨立于資料庫之外,位于資料庫密碼檔案之中,屬于密碼認證範疇

        通常在啟動資料庫時使用的場合較多,當然也可以以這兩種方式連接配接資料庫

        連接配接資料庫時使用sysdba則show user檢視時為sys,使用sysoper則show user檢視時為public