背景:
某日客戶進行周期審計,發(fā)現(xiàn)數據庫內(11.2.0.4)部分用戶擁有DBA權限要求回收
revoke dba from user1;
在回收了dba角色的權限后,收到開發(fā)人員報障,無表空間操作的相關權限,經過排查后發(fā)現(xiàn)用戶缺少了unlimited tablespace權限,因此報錯,在賦權后故障恢復。
grant unlimited tablespace to user1;
這里當時產生了一個疑問,為什么回收DBA角色會影響到unlimited tablespace?在創(chuàng)建用戶之初并沒有特意單獨授予該權限,接下來通過實驗驗證。
正文:
首先創(chuàng)建一個測試用戶,可以看到該用戶并無系統(tǒng)權限
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';

通過上述測試可以發(fā)現(xiàn),角色resource其中包含了unlimited tablespace權限,因此在將該角色授予用戶時,用戶也擁有了unlimited tablespace權限。
接下來模擬測試回收dba角色后的權限變化,首先將DBA角色授予測試用戶,能夠看到系統(tǒng)權限依然是unlimited tablespace

回收DBA角色后發(fā)現(xiàn)unlimited tablespace權限也被一并回收,符合本文開頭描述的現(xiàn)象。

此時如果需要unlimited tablespace權限,則需要單獨授權

那么,為何在回收DBA角色后unlimited tablespace權限也會被一并回收?再創(chuàng)建一個用戶單獨授權DBA角色,觀察一下系統(tǒng)權限情況。

通過上述實驗可以看出,dba角色也包含了unlimited tablespace權限,因此在回收dba角色后,該權限也會被回收。
以上測試過程是在11g版本,后續(xù)更高級版本是否還會有此問題?繼續(xù)測試。


可以看到,在19c中resource角色已經不包含unlimited tablespace權限,如果單獨授權了unlimited tablespace后,又授予了dba角色,在回收權限時,unlimited tablespace權限依然會被一并回收。
通過查詢網上資料發(fā)現(xiàn),在12c開始Oracle就將resource角色中的unlimited tablespace權限分離出去了,如果有需要該權限,則需要額外單獨賦權。
結論:
1.在11g中resource角色包含unlimited tablespace權限,如用戶還擁有DBA角色,那么在回收DBA角色時會將unlimited tablespace權限一并回收。
2.從12c開始resource角色中不包含unlimited tablespace權限,需要額外單獨賦權。




