--=====================================
-- 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