2015-11-05 119 views
0

我想將一個web應用交給一些人,但這些人不應該被允許通過一些工具訪問數據庫。使用webapplicaton和在後臺數據庫是好的。蜻蜓:加密數據庫的密碼和用戶名

Wildfly與這些代碼的配置:

<xa-datasource jndi-name="java:jboss/datasources/ExampleXADS" pool-name="ExampleXADS"> 
     <driver>h2</driver> 
     <xa-datasource-property name="URL">jdbc:h2:mem:test</xa-datasource-property> 
     <xa-pool> 
      <min-pool-size>10</min-pool-size> 
      <max-pool-size>20</max-pool-size> 
      <prefill>true</prefill> 
     </xa-pool> 
     <security> 
      <user-name>sa</user-name> 
      <password>sa</password> 
     </security> 
    </xa-datasource> 

正如你所看到的,還有的用戶名和密碼可用。如何排除/加密這些數據,因此只有管理員知道數據庫的密碼。 對於整個應用程序服務器也是如此 - 也有用戶和密碼。 我該怎麼做?

編輯: 「客戶」將得到整個應用程序,包括web服務器配置。 (Wilfly和.war - 文件) 僅用於將軟件密鑰保存在數據庫中。 如果「客戶」第一次啓動Web應用程序,系統會提示他輸入許可證密鑰。 輸入許可證密鑰後,將調用Web服務。返回代碼是「假」或「真」(是關鍵有效或是關鍵無效) 我的第一個想法是將標誌存儲在數據庫中。但是如果用戶可以訪問數據庫,他可以自己操作這個標誌。 是否有任何其他可能性爲「軟件密鑰有效」設置標誌,而不是將標誌保存在數據庫中。 任何想法?

回答

-1

這是不可能的。如果Web應用程序必須能夠解密密碼才能使用數據庫,則服務器上的任何人都可以執行相同的操作。

如果您想要限制訪問權限,請將服務器置於您的控制之下,並讓他們僅通過Web前端訪問它。 (即使有可能進行有效加密,如果他們有服務器訪問權限,他們也可以簡單地將數據庫文件複製到他們的工作站上,或者將新的用戶帳戶添加到數據庫服務器上)。

+0

我編輯我的第一篇文章,任何想法呢? – internet

+0

JBoss安全域是一個很好的選擇。 – mod

3

您可以使用安全域來解決這個問題,這可能是Wildfly的一些特定更改,但對於JBoss 7.1.1,這裏是您需要執行的操作。

  1. 找到你的JBoss/Widlfy JBoss服務器日誌記錄,3.1.0.GA.jar的位置。在JBoss 7.1.1的情況下,應該是這樣的 - modules \ org \ jboss \ logging \ main \ jboss-logging-3.1.0.GA.jar

  2. 找到picketbox-4.0.7.Final的位置.jar

  3. 檢查picketbox jar是否具有org.picketbox.datasource.security.SecureIdentityLoginModule類。

  4. 運行從JBoss服務器根文件夾下面的命令以加密數據源連接密碼

    java命令模塊\有機\的JBoss \記錄\主\ JBoss的測井-3.1.0.GA.jar;模塊\ org \ picketbox \ main \ picketbox-4.0.7.Final.jar org.picketbox.datasource.security.SecureIdentityLoginModule PasswordXYZ

  5. 獲取輸出文本並單機運行。XML添加以下安全域下的內容:

      <security-domain name="encrypted-ds-WASM2" cache-type="default"> 
           <authentication> 
            <login-module code="org.picketbox.datasource.security.SecureIdentityLoginModule" flag="required"> 
             <module-option name="username" value="WASM2"/> 
             <module-option name="password" value="89471a19022f8af"/> 
             <module-option name="managedConnectionFactoryName" value="jboss.jca:service=LocalTxCM,name=MySqlDS_Pool"/> 
            </login-module> 
           </authentication> 
          </security-domain> 
    
  6. 使用的安全域的數據源元素如下:

      <datasource jta="false" jndi-name="java:jboss/jdbc/JNDIDS" pool-name="OFS1" enabled="true" use-ccm="false"> 
           <connection-url>jdbc:oracle:thin:@x.x.x.x:1521:xxxx</connection-url> 
           <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> 
           <driver>oracle</driver> 
           <security> 
            <security-domain>encrypted-ds-WASM2</security-domain> 
           </security> 
           <validation> 
            <validate-on-match>false</validate-on-match> 
            <background-validation>false</background-validation> 
            <background-validation-millis>1</background-validation-millis> 
           </validation> 
           <statement> 
            <prepared-statement-cache-size>0</prepared-statement-cache-size> 
            <share-prepared-statements>false</share-prepared-statements> 
           </statement> 
          </datasource> 
    

參考鏈接:http://middlewaremagic.com/jboss/?p=1026

+0

沒有意義 - 它用一個固定的密碼加密,你可以從這裏得到一個解密器(https://raw.githubusercontent.com/usefulfor/usefulfor/master/security/JBoss.java)。有一個[JBOSS的開放漏洞](https://issues.jboss.org/browse/JBAS-4460),它被標記爲「不會修復」,因爲「*」加密數據庫「的密碼是爲了傳遞愚蠢的安全審計。最終會有某種地方的密碼,因爲系統需要解密密碼才能將其發送到數據庫。對於經驗豐富的程序員來說,這樣做總是很容易的。*「 – TessellatingHeckler