背景:
某日客户进行周期审计,发现数据库内(11.2.0.4)部分用户拥有DBA权限要求回收
revoke dba from user1;
在回收了dba角色的权限后,收到开发人员报障,无表空间操作的相关权限,经过排查后发现用户缺少了unlimited tablespace权限,因此报错,在赋权后故障恢复。
grant unlimited tablespace to user1;
这里当时产生了一个疑问,为什么回收DBA角色会影响到unlimited tablespace?在创建用户之初并没有特意单独授予该权限,接下来通过实验验证。
正文:
首先创建一个测试用户,可以看到该用户并无系统权限
create user test_privs identified by fr123;
select grantee,privilege from dba_sys_privs where grantee='TEST_PRIVS';
授予测试用户connect和resource两个角色
grant connect to test_privs;
grant resource to test_privs;
select grantee,privilege from dba_sys_privs where grantee='TEST_PRIVS';
通过上述测试可以发现,角色resource其中包含了unlimited tablespace权限,因此在将该角色授予用户时,用户也拥有了unlimited tablespace权限。
接下来模拟测试回收dba角色后的权限变化,首先将DBA角色授予测试用户,能够看到系统权限依然是unlimited tablespace
回收DBA角色后发现unlimited tablespace权限也被一并回收,符合本文开头描述的现象。
此时如果需要unlimited tablespace权限,则需要单独授权
那么,为何在回收DBA角色后unlimited tablespace权限也会被一并回收?再创建一个用户单独授权DBA角色,观察一下系统权限情况。
通过上述实验可以看出,dba角色也包含了unlimited tablespace权限,因此在回收dba角色后,该权限也会被回收。
以上测试过程是在11g版本,后续更高级版本是否还会有此问题?继续测试。
可以看到,在19c中resource角色已经不包含unlimited tablespace权限,如果单独授权了unlimited tablespace后,又授予了dba角色,在回收权限时,unlimited tablespace权限依然会被一并回收。
通过查询网上资料发现,在12c开始Oracle就将resource角色中的unlimited tablespace权限分离出去了,如果有需要该权限,则需要额外单独赋权。
结论:
1.在11g中resource角色包含unlimited tablespace权限,如用户还拥有DBA角色,那么在回收DBA角色时会将unlimited tablespace权限一并回收。
2.从12c开始resource角色中不包含unlimited tablespace权限,需要额外单独赋权。