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 实例,或者在做数据库权限审计,搞清楚这俩权限的区别还蛮重要的,别到时候连谁能干啥都说不清哦。