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