dba和sysdba的区别(转自“三十而立专栏”博客)
时间:2010-12-21 来源:shuangoracle
dba是实实在在存在在Oracle里的一个角色(屋里对象),而sysdba则指的是一种逻辑概念上的操作对象,在Oracle数据里并不存在。
所以说这两个概念是完全不同的。dba是一种role对应的是对Oracle实例里对象的操作权限的集合,而sysdba是概念上的role是一种登录认证时的身份标识而已。
下面我们通过详细的实例来看看他们的区别
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';
未选定行
2. grant dba 和grant sysdba的差别
因为dba是oracle的一种role,所以和oracle其他普通的角色一样,在grant后在角色权限表dba_role_privs可以查到,revoke后就没有了。
SQL> grant dba to test;
授权成功。
SQL> select * from dba_role_privs where grantee='TEST';
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
TEST RESOURCE NO YES
TEST DBA NO YES
SQL> revoke dba from test;
撤销成功。
SQL> select * from dba_role_privs where grantee='TEST';
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
TEST RESOURCE NO YES
对于sysdba是不会出现这个情况的,因为他不是正真的role
SQL> grant sysdba to test;
授权成功。
SQL> select * from dba_role_privs where grantee='TEST';
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
TEST RESOURCE 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后,在这里就多了一条
SQL> grant sysdba to test;
授权成功。
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
TEST TRUE FALSE
下面我们revoke一下,再来看
SQL> revoke sysdba from test;
撤销成功。
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
没有叻。
所以在这里dba和sysdba是根本不同概念了。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/inthirties/archive/2009/05/09/4159489.aspx
相关阅读 更多 +