談談Oracle 數據庫的系統權限UNLIMITED TABLESPACE

談談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的系統權限。

wKioL1jOW8LSOWsMAAAyfCSejoc000.png-wh_50


(2)查看RESOURCE角色,見下圖,發現這個角色具有8個系統權限,但是沒有發現UNLIMITED TABLESPACE的系統權限。

wKioL1jOXBLgSXF5AABD2LSw2IQ448.png-wh_50

(3)查看DBA角色,見下圖,發現該角色具有的系統權限更多,我對PRIVILEGE的列進行了降序處理,以U開頭的系統權限都顯示在了最前面,但並沒有發現UNLIMITED TABLESPACE。

wKiom1jOXE-Dmoa-AABIupzQwbo052.png-wh_50

2.查看2個用戶,SYS和SYSTEM。

(1)查看SYS用戶,見下圖,發現SYS用戶是具有UNLIMITED TABLESPACE的系統權限。

wKioL1jOXJrBnqN3AABkizYlgJM897.png-wh_50

(2)查看SYSTEM用戶,見下圖,發現SYSTEM用戶也具有UNLIMITED TABLESPACE的系統權限。

wKiom1jOXMih6iEPAAA1jE7XY2c066.png-wh_50

從上面的查看,我們可以得出如下結論,

  • 角色CONNECT、RESOURCE和DBA都不具有UNLIMITED TABLESPACE的系統權限;

  • 用戶SYS和SYSTEM都具有UNLIMITED TABLESPACE的系統權限。

接下來,我們再看看,3個角色CONNECT、RESOURCE和DBA具有什麼樣的角色權限?

1.角色CONNECT和RESOURCE,見下圖,發現沒有任何的角色權限。

wKiom1jOXR_TsiIeAAAttJrEycY105.png-wh_50

2.角色DBA,見下圖,發現該角色具有很多的角色權限。

wKioL1jOXUjAsmcxAABk-DJy2R4967.png-wh_50

最後,我們在測試庫創建一個表空間TEST和一個用戶TEST,並設置表空間TEST爲用戶TEST的默認表空間,授予CONNECT和RESOURCE的角色權限,觀察該用戶具有什麼樣的系統權限?操作步驟如下,

(1)查看數據庫版本,如下圖,

wKiom1jOXYXh7DutAAA4aClIVCk226.png-wh_50

(2)創建表空間TEST,見下圖,

wKioL1jOXaiD1kjdAAAY3kFcdDc171.png-wh_50

(3)創建用戶TEST,見下圖,

wKiom1jOXcTQwgddAAAS1Yw01W4768.png-wh_50

(4)給用戶TEST授予CONNECT的角色權限,並查看該用戶具有的系統權限,見下圖,發現並沒有什麼系統權限。

wKioL1jOXeCRfik8AAA1Xpjfpl8130.png-wh_50

(5)給用戶TEST授予RESOURCE的角色權限,並查看該用戶具有的系統權限,見下圖,居然發現具有了UNLIMITED TABLESPACE的系統權限。

wKiom1jOXgLiieuPAAAoqjuTYdU468.png-wh_50

從這個操作和前面的演示可以得出,RESOURCE角色本身沒有UNLIMITED TABLESPACE的系統權限,但是給普通用戶授予了該角色,就使得該用戶默認具有了UNLIMITED TABLESPACE的系統權限。帶着這個疑問,查了一下Google,發現AskTom這個網站的回答很權威,而且很有說服力。見操作步驟,如下圖,

wKiom1jOXlaQeqiuAAGiMBmWf1Y482.png-wh_50

wKiom1jOXmbjjkj8AAE8a8vEmw8464.png-wh_50

如上,有人提問Tom Kyte大師,爲什麼RESOURCE角色本身沒有UNLIMITED TABLESPACE的系統權限,但是給普通用戶授予了RESOURCE的角色,該用戶就具有了UNLIMITED TABLESPACE的系統權限呢?

大師是這樣回答的,那個UNLIMITED TABLESPACE的系統權限已經被硬編碼到RESOURCE角色中了,是特殊的一個權限。見下圖所示,

wKiom1jOXq7jVJooAACuejvdmNw612.png-wh_50

下面還有來自印度的Haroon大師給出了評論,他是這樣闡述的,在RESOURCE角色裏,UNLIMITED TABLESPACE是一個隱藏的系統權限,它在Oracle 12.1.0.1的版本中已經修復了這個bug,並且在12.1.0.1中,創建的普通用戶在授予RESOURCE的角色以後,默認不具有UNLIMITED TABLESPACE的系統權限,所以在撤銷UNLIMITED TABLESPACE的權限時會報錯,提示沒有授予過該權限,見下圖紅色方框描述,

wKioL1jOXvnRES4BAADVe2nu2S4192.png-wh_50

下面把Tom Kyte大師的工作經歷show一下,以作爲我繼續研究Oracle的源動力和精神支柱。

wKiom1jOX-OgtoaMAACV0pM0CcM711.png-wh_50

(6)給用戶TEST授予DBA的角色權限,查看用戶具有的系統權限,再將用戶的DBA角色權限撤銷,再次查看用戶具有的系統權限有哪些?見下圖操作,

wKioL1jOYFPRLoJXAABW7L3sjAk526.png-wh_50

wKioL1jOYHGyzOjLAAA_MSPodYE438.png-wh_50

從上面兩圖可以得出,DBA的角色權限殺傷力很大呀,授予的時候,沒什麼影響,撤銷的時候,就把原先的UNLIMITED TABLESPACE的系統權限悄悄的給收回了,感覺好恐怖喲!所以告誡大家,一定不要給普通用戶授予DBA的角色權限,如果曾經授予過,再撤銷以後,一定要給普通用戶單獨授予UNLIMITED TABLESPACE的系統權限或重新授予一次RESOURCE的角色權限。見下圖所示,

wKiom1jOYMDxJWfcAAAqlIcGO8o343.png-wh_50

wKioL1jOYNmyFlPpAAAom-nzJYE863.png-wh_50




如果您覺得此篇文章對您有幫助,歡迎關注微信公衆號:guestart的DBA學習筆記,您的支持是對我最大的鼓勵!

wKiom1jPYHuhU2r3AAAT4gjVou0485.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章