dba和sysdba的區別

wengtf發表於2011-07-29

as sysdba 就是以sysdba登入,oracle登入身份有三種:
normal 普通身份
sysdba 系統管理員身份
sysoper 系統操作員身份
每種身份對應不同的許可權

sysdba許可權:
●啟動和關閉操作
●更改資料庫狀態為開啟/裝載/備份,更改字符集
●建立資料庫
●建立伺服器引數檔案spfile
●日誌歸檔和恢復
●包含了“會話許可權”許可權

sysoper許可權:
●啟動和關閉操作
●更改資料庫狀態為開啟/裝載/備份
●建立伺服器引數檔案SPFILE
●日誌歸檔和恢復
●包含了“會話許可權”許可權

請關注2個檢視:dba_role_privs與 v$pwfile_users。

言簡意賅的說下就是 dba跟dba_role_privs有關,而sysdba跟v$pwfile_users有關
下面引用下csdn一網友的小實驗:

1. 物理上的role dba 是可以在資料字典裡查到的
SQL> select * from dba_roles where upper(role) = ‘DBA’;

ROLE                          PASSWORD
—————————— ——–
DBA                            NO

而sysdba是概念上的role在資料字典裡是查不到的

SQL> select * from dba_roles where upper(role) = ‘SYSDBA’;
no rows selected

2. grant dba 和grant sysdba的差別
dba是正真的role,所以grant後在dba_role_privs裡有記錄,而revoke後就沒有了

SQL>  grant dba to testuser;
SQL> select * from dba_role_privs where grantee = ‘TESTUSER’;
GRANTEE                        GRANTED_ROLE                  ADM DEF
—————————— —————————— — —
TESTUSER                      RESOURCE                      NO  YES
TESTUSER                      CONNECT                        NO  YES
TESTUSER                      DBA                            NO  YES
SQL>  revoke dba from testuser;
SQL> select * from dba_role_privs where grantee = ‘TESTUSER’;
GRANTEE                        GRANTED_ROLE                  ADM DEF
—————————— —————————— — —
TESTUSER                      RESOURCE                      NO  YES
TESTUSER                      CONNECT                        NO  YES

對於sysdba是不會出現這個情況的,因為他不是正真的role
SQL> grant sysdba to testuser;
SQL> select * from dba_role_privs where grantee = ‘TESTUSER’;
GRANTEE                        GRANTED_ROLE                  ADM DEF
—————————— —————————— — —
TESTUSER                      RESOURCE                      NO  YES
TESTUSER                      CONNECT                        NO  YES

那麼這個是sysdba是這麼記錄的
sysdba是登入時候需要的他是和remote_login_passwordfile關聯的
我們可以查詢v$pwfile_users;
如下:
SQL> select * from v$pwfile_users;
USERNAME                      SYSDB SYSOP
—————————— —– —–
SYS                            TRUE  TRUE
SYSTEM                        TRUE  FALSE
TESTUSER                      TRUE  FALSE
當你grant sysdba後,在這裡就多了一條
下面我們revoke一下,再來看
SQL> revoke sysdba from testuser;
SQL> select * from v$pwfile_users;
USERNAME                      SYSDB SYSOP
—————————— —– —–
SYS                            TRUE  TRUE
SYSTEM                        TRUE  FALSE

消失了對吧。

所以在這裡dba和sysdba是根本不同概念了。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22907091/viewspace-703450/,如需轉載,請註明出處,否則將追究法律責任。

相關文章