2015-11-05 120 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