Oracle dba和sysdba的区别

         之前老是把dba和sysdba混为一体,今天看到论坛在讨论两者的区别,特记录如下:
SYSDBA不是权限,当用户以SYSDBA身份登陆数据库时,登陆用户都会变成SYS.
sysdba身份登陆可以打开,关闭数据库,创建SPFILE,对数据库进行恢复操作等,而这些是DBA角色无法实现的;

sysdba 是系统权限,dba是用户对象权限;

sysdba,是管理oracle实例的,它的存在不依赖于整个数据库完全启动,只要实例启动了,他就已经存在;

以sysdba身份登陆,装载数据库、打开数据库,只有数据库打开了,或者说整个数据库完全启动后,dba角色才有了存在的基础;
dba是一种role对应的是对Oracle实例里对象的操作权限的集合,而sysdba是概念上的role是一种登录认证时的身份标识而已。

而且,dba是Oracle里的一种对象,Role 和User一样,是实实在在存在在Oracle里的物理对象,而sysdba是指的一种概念上的操作对象,在Oracle数据里并不存在。

SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS                            TRUE  TRUE  FALSE
添加一个用户的dba权限

SQL> grant dba to jinlian
  2  ;

Grant succeeded.
明确看到系统中有dba的role权限,而且jinlian用户已经是dba,sys也是dba用户
SQL> SELECT * FROM  DBA_ROLE_PRIVS WHERE GRANTED_ROLE='DBA';

GRANTEE                        GRANTED_ROLE                   ADM DEF
------------------------------ ------------------------------ --- ---
OGG_TS                         DBA                            NO  YES
SYS                            DBA                            YES YES
JINLIAN                        DBA                            NO  YES
SYSTEM                         DBA                            YES YES
查询数据库中是否含有sysdba的角色权限

SQL> SELECT * FROM  DBA_ROLE_PRIVS WHERE GRANTED_ROLE LIKE '*DBA*';


no rows selected
SQL> SELECT * FROM  DBA_ROLE_PRIVS WHERE GRANTED_ROLE='SYSDBA';


no rows selected
并不存在sysdba的角色权限。查看此时jinlian用户是否是sysdba
SQL> select * from v$pwfile_users;


USERNAME                       SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS                            TRUE  TRUE  FALSE
依然只有sys,查看orapw密码文件,只有internal(是sys用户)

[oracle@og1 dbs]$ cd /u01/app/oracle/product/11.2.0/dbhome_1/dbs/
[oracle@og1 dbs]$ strings orapwogg1 
]\[Z
ORACLE Remote Password file
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
3gM 
授予金莲sysdba权限,分别以普通用户和sysdba登陆
SQL> grant sysdba to jinlian;

Grant succeeded.

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> conn jinlian/jinlian
Connected.
SQL> show user
USER is "JINLIAN"
SQL> conn jinlian/jinlian as sysdba
Connected.
SQL> show user
USER is "SYS"

以sysdba登陆用户就是sys了,以普通用户登陆还是本身的用户。此时查看密码文件多了jinlian的密码信息

SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS                            TRUE  TRUE  FALSE
JINLIAN                        TRUE  FALSE FALSE

[oracle@og1 dbs]$ strings orapwogg1 
]\[Z
ORACLE Remote Password file
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
3gM 
JINLIAN
E8D040CA2EE5FD93
CTe!SZ

密码文件是保存系统中具有sysdba权限用户的密码的文件。



你可能感兴趣的:(oracle)