Oracle用戶訪問權限與PUBLIC角色的關系 |
發(fā)布時間: 2012/7/28 17:03:54 |
在數據庫中創(chuàng)建了一個用戶,這是給第三方系統(tǒng)用的?蛻魪娬{,這個用戶只能訪問到有限的表,在我們規(guī)定的范圍內的表。 于是,我創(chuàng)建 一個用戶,如user_third ,只給了connect 角色,用grant select on table 有限授權。 為此,我寫了一文,請見 如何實現 Oracle中用戶 B只能訪問用戶 A的視圖 ( http://www.linuxidc.com/Linux/2012-06/62061.htm )
用戶訪問密碼交給客戶后,又發(fā)現一個新問題,它居然能訪問其他用戶的表。 我核實了一下,發(fā)現它確實能訪問別的用戶的表。如數據 庫中TT 用戶下的表。 這是怎么回事? 您從我列出的標題中,一定猜到了吧。這事一定 public 角色有關。 在 Oracle TimeTen 創(chuàng)建時,它創(chuàng)建的表會自動將它的查詢權限授予給 public 角色。 而數據庫中任何一個用戶都默認擁有 public 角色。 因此,問題就在 public 角色的權限上。我們只需要查詢 public 角色授予了哪些權限,再撤銷這些權限即可。 通過執(zhí)行下列 SQL ,我們能判斷出哪些權限授予給了 public 角色。 SELECT GRANTOR,OWNER,TABLE_NAME,PRIVILEGE FROM DBA_TAB_PRIVS WHERE GRANTEE='PUBLIC'; 部分結果如下: GRANTOR OWNER TABLE_NAME PRIVILEGE ------------------------------ ---------------------------------------- ×× GTJA TT_03_24577_L UPDATE GTJA GTJA TT_03_24577_L SELECT GTJA GTJA TT_03_24577_L INSERT GTJA GTJA TT_03_24577_L DELETE TT 表的查詢更新刪除插入權限都授予給了public 角色。這個很恐怖,對數據庫系統(tǒng)的安全是有破壞的。 基于此,我們可以判定任何一個數據庫用戶都可以對這些表做查詢更新刪除插入操作。 怎么解決這個權限問題,是很簡單的。但一定要保證不能影響到TT 的正常使用。這是個權衡的問題,可用性和安全兩個角度的權衡。如果TT 不正常了,就考慮將其遷移到其他庫上去,最好是獨立的僅供TT 使用的庫。 具體解決方法如下: 1 、從Oracle TimeTen 上解決,在創(chuàng)建cachegroup 時,將授予公共權限的選項除掉。當然這么做的前提是要保證TT 能夠正常使用。 2 、從數據庫中將這些權限從public 角色撤銷。同樣前提是TT 在這些權限撤銷后能正常工作。 撤銷方法示例如下: revoke select on TT_03_24577_L from public; 總結一下,這個實例說明了Oracle 的權限真夠復雜的,日常管理時一定要留意一下public 角色的權限。 本文出自:億恩科技【www.allwellnessguide.com】
用戶訪問密碼交給客戶后,又發(fā)現一個新問題,它居然能訪問其他用戶的表。 我核實了一下,發(fā)現它確實能訪問別的用戶的表。如數據 庫中TT 用戶下的表。 這是怎么回事? 您從我列出的標題中,一定猜到了吧。這事一定 public 角色有關。 在 Oracle TimeTen 創(chuàng)建時,它創(chuàng)建的表會自動將它的查詢權限授予給 public 角色。 而數據庫中任何一個用戶都默認擁有 public 角色。 因此,問題就在 public 角色的權限上。我們只需要查詢 public 角色授予了哪些權限,再撤銷這些權限即可。 通過執(zhí)行下列 SQL ,我們能判斷出哪些權限授予給了 public 角色。 SELECT GRANTOR,OWNER,TABLE_NAME,PRIVILEGE FROM DBA_TAB_PRIVS WHERE GRANTEE='PUBLIC'; 部分結果如下: GRANTOR OWNER TABLE_NAME PRIVILEGE ------------------------------ ---------------------------------------- ×× GTJA TT_03_24577_L UPDATE GTJA GTJA TT_03_24577_L SELECT GTJA GTJA TT_03_24577_L INSERT GTJA GTJA TT_03_24577_L DELETE TT 表的查詢更新刪除插入權限都授予給了public 角色。這個很恐怖,對數據庫系統(tǒng)的安全是有破壞的。 基于此,我們可以判定任何一個數據庫用戶都可以對這些表做查詢更新刪除插入操作。 怎么解決這個權限問題,是很簡單的。但一定要保證不能影響到TT 的正常使用。這是個權衡的問題,可用性和安全兩個角度的權衡。如果TT 不正常了,就考慮將其遷移到其他庫上去,最好是獨立的僅供TT 使用的庫。 具體解決方法如下: 1 、從Oracle TimeTen 上解決,在創(chuàng)建cachegroup 時,將授予公共權限的選項除掉。當然這么做的前提是要保證TT 能夠正常使用。 2 、從數據庫中將這些權限從public 角色撤銷。同樣前提是TT 在這些權限撤銷后能正常工作。 撤銷方法示例如下: revoke select on TT_03_24577_L from public; 總結一下,這個實例說明了Oracle 的權限真夠復雜的,日常管理時一定要留意一下public 角色的權限。 本文出自:億恩科技【www.enidc.com】 --> |