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是根本不同概念了。