2012-11-08 22 views
0

有什麼方法可以使用JBoss和Oracle定義一個真正的只讀數據源?如何將Oracle JBoss數據源定義爲只讀?

我想堅持單一的默認模式用戶,但限制應用程序的某些部分爲只讀,以避免SQL注入問題。如果在JBoss中沒有這種方式,我將不得不在Oracle中創建另一個用戶權限有限的用戶。

+0

爲什麼JBoss需要限制只讀? –

+1

如果你擔心*只是* SQL注入攻擊,那麼你的程序員就可以使用準備好的語句。還是他們不遵循編碼標準? – Perception

+0

它更復雜......我們允許在某些部分使用自定義的「公式」作爲查詢來自實體化視圖的大量數據的select語句的一部分,這些部分被轉發到Oracle。將其視爲數據倉庫功能。我們進行了一些常規檢查,但我想確保用戶無法以任何方式注入任何類似ALTER TABLE或DELETE FROM ...即使不是偶然的 - 如果可能的話,無需配置單獨的數據庫用戶。 –

回答

4

無論你在JBoss中是否可以這樣做,都應該創建第二個用戶。

應該在數據庫層設置數據庫權限;不要試圖在代碼中應用它們。該數據庫旨在確保無法寫入您無權寫入的表。如果你在應用程序中實現它,它只需要一個小小的改變或者一個小錯誤來打破這個限制。

如果您不想在另一個模式中引用表,您可以始終創建一個指向它的自己的同義詞。

有一個related programmers question,您可能會感興趣。簡單地說就是「不要在代碼中做什麼,你可以得到SQL服務器來爲你做好」。這個具體的情況沒有提到,但我認爲它適用。

+0

我擔心這會成爲......使我們的客戶和託管服務變得更復雜一些......但我們可能會在這裏與安全性辯論。 –

0

要完成這個...我已經創建另一個用戶用下面的SQL:

-- USER SQL 
CREATE USER MYUSER_READONLY IDENTIFIED BY password 
DEFAULT TABLESPACE "USERS" 
TEMPORARY TABLESPACE "TEMP"; 

-- ROLES 
GRANT "AUTHENTICATEDUSER" TO MYUSER_READONLY; 
GRANT "CONNECT" TO MYUSER_READONLY; 
GRANT "EJBCLIENT" TO MYUSER_READONLY; 
GRANT SELECT ANY TABLE TO MYUSER_READONLY; 
GRANT ALTER SESSION TO MYUSER_READONLY; 

爲了簡化用戶的使用我的Java代碼初始化我們用下面的語句每一個SQL會話:

ALTER SESSION SET CURRENT_SCHEMA = MYUSER; 

這使我們能夠查詢其他用戶的表,就好像它是同一個用戶一樣。

就是這樣。

相關問題