Oracle 数据库权限搞不明白?DBA 和 SYSDBA 虽然听起来像一回事,其实差别还挺大的。DBA是个预定义的角色,授予之后用户就能干各种数据库管理的活,比如建用户、建表空间、搞备份。

SYSDBA不一样,它不是角色,是一种身份,更高权限,启动数据库、做恢复操作啥的,全靠它。关键是,它连字典表都查不到,只有在v$pwfile_users里才看到谁拿到了这权限。

比如你用 SQL 查询DBA_ROLE_PRIVS可以查谁是 DBA:

SELECT GRANTEE, GRANTED_ROLE FROM DBA_ROLE_PRIVS WHERE GRANTED_ROLE = 'DBA';

但查 SYSDBA 得看v$pwfile_users

SELECT USERNAME, SYSDB FROM V$PWFILE_USERS;

如果你平时只做日常维护,给用户 DBA 就够了,但要动系统级的东西,比如宕机后恢复数据库,就得上 SYSDBA。

还有,GRANT SYSDBA TO 用户名跟普通的 GRANT DBA TO 用户名不是一个事,权限范围完全不一样。别搞混了,不然容易给人开了太大口子。

顺便推荐几篇相关的文章:

如果你最近在维护 Oracle 实例,或者在做数据库权限审计,搞清楚这俩权限的区别还蛮重要的,别到时候连谁能干啥都说不清哦。