您好,登錄后才能下訂單哦!
談談Oracle 數據庫的系統權限UNLIMITED TABLESPACE
作者:趙全文 網名:guest
前日上午,開發同學反饋,應用程序在連接一套Oracle 11.2.0.4.0數據庫的生產用戶時,一直報“無操作表空間”的權限。于是,我趕緊連到SQLPLUS里進行查看該用戶具有什么樣的權限(包括系統權限、角色權限和對象權限),沒有發現什么異常。大家都知道,一般在建立用戶以后,都會給CONNECT和RESOURCE的角色權限。然后,我連到其它無報錯的另一套Oracle 11.2.0.4.0數據庫的生產用戶上查看,兩套數據庫進行對比,發現報錯的那套數據庫沒有“UNLIMITED TABLESPACE”的系統權限,給授予了該系統權限以后,又和開發同學聯系,他說已經正常了。
鑒于以上的故障處理,下面我們來看一看,Oracle數據庫里的幾個角色和用戶是否具有UNLIMITED TABLESPACE的系統權限?
1.查看3個角色,CONNECT、RESOURCE和DBA。
(1)查看CONNECT角色,見下圖,發現這個角色只具有CREATE SESSION的系統權限。
(2)查看RESOURCE角色,見下圖,發現這個角色具有8個系統權限,但是沒有發現UNLIMITED TABLESPACE的系統權限。
(3)查看DBA角色,見下圖,發現該角色具有的系統權限更多,我對PRIVILEGE的列進行了降序處理,以U開頭的系統權限都顯示在了最前面,但并沒有發現UNLIMITED TABLESPACE。
2.查看2個用戶,SYS和SYSTEM。
(1)查看SYS用戶,見下圖,發現SYS用戶是具有UNLIMITED TABLESPACE的系統權限。
(2)查看SYSTEM用戶,見下圖,發現SYSTEM用戶也具有UNLIMITED TABLESPACE的系統權限。
從上面的查看,我們可以得出如下結論,
角色CONNECT、RESOURCE和DBA都不具有UNLIMITED TABLESPACE的系統權限;
用戶SYS和SYSTEM都具有UNLIMITED TABLESPACE的系統權限。
接下來,我們再看看,3個角色CONNECT、RESOURCE和DBA具有什么樣的角色權限?
1.角色CONNECT和RESOURCE,見下圖,發現沒有任何的角色權限。
2.角色DBA,見下圖,發現該角色具有很多的角色權限。
最后,我們在測試庫創建一個表空間TEST和一個用戶TEST,并設置表空間TEST為用戶TEST的默認表空間,授予CONNECT和RESOURCE的角色權限,觀察該用戶具有什么樣的系統權限?操作步驟如下,
(1)查看數據庫版本,如下圖,
(2)創建表空間TEST,見下圖,
(3)創建用戶TEST,見下圖,
(4)給用戶TEST授予CONNECT的角色權限,并查看該用戶具有的系統權限,見下圖,發現并沒有什么系統權限。
(5)給用戶TEST授予RESOURCE的角色權限,并查看該用戶具有的系統權限,見下圖,居然發現具有了UNLIMITED TABLESPACE的系統權限。
從這個操作和前面的演示可以得出,RESOURCE角色本身沒有UNLIMITED TABLESPACE的系統權限,但是給普通用戶授予了該角色,就使得該用戶默認具有了UNLIMITED TABLESPACE的系統權限。帶著這個疑問,查了一下Google,發現AskTom這個網站的回答很權威,而且很有說服力。見操作步驟,如下圖,
如上,有人提問Tom Kyte大師,為什么RESOURCE角色本身沒有UNLIMITED TABLESPACE的系統權限,但是給普通用戶授予了RESOURCE的角色,該用戶就具有了UNLIMITED TABLESPACE的系統權限呢?
大師是這樣回答的,那個UNLIMITED TABLESPACE的系統權限已經被硬編碼到RESOURCE角色中了,是特殊的一個權限。見下圖所示,
下面還有來自印度的Haroon大師給出了評論,他是這樣闡述的,在RESOURCE角色里,UNLIMITED TABLESPACE是一個隱藏的系統權限,它在Oracle 12.1.0.1的版本中已經修復了這個bug,并且在12.1.0.1中,創建的普通用戶在授予RESOURCE的角色以后,默認不具有UNLIMITED TABLESPACE的系統權限,所以在撤銷UNLIMITED TABLESPACE的權限時會報錯,提示沒有授予過該權限,見下圖紅色方框描述,
下面把Tom Kyte大師的工作經歷show一下,以作為我繼續研究Oracle的源動力和精神支柱。
(6)給用戶TEST授予DBA的角色權限,查看用戶具有的系統權限,再將用戶的DBA角色權限撤銷,再次查看用戶具有的系統權限有哪些?見下圖操作,
從上面兩圖可以得出,DBA的角色權限殺傷力很大呀,授予的時候,沒什么影響,撤銷的時候,就把原先的UNLIMITED TABLESPACE的系統權限悄悄的給收回了,感覺好恐怖喲!所以告誡大家,一定不要給普通用戶授予DBA的角色權限,如果曾經授予過,再撤銷以后,一定要給普通用戶單獨授予UNLIMITED TABLESPACE的系統權限或重新授予一次RESOURCE的角色權限。見下圖所示,
或
如果您覺得此篇文章對您有幫助,歡迎關注微信公眾號:guestart的DBA學習筆記,您的支持是對我最大的鼓勵!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。