Wildfly:加密数据库的密码和用户名

时间:2015-11-05 06:38:14

标签: encryption wildfly

我想将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应用程序,则会提示他输入许可证密钥。 输入许可证密钥后,将调用Webservice。返回码为“false”或“true”(密钥有效或密钥无效) 我的第一个想法是将标志存储在数据库中。但是如果用户可以访问数据库,他可以自己操纵这个标志。 是否有其他可能为“软件密钥有效”设置标志,而不是在数据库中保存标志。 有什么想法吗?

2 个答案:

答案 0 :(得分:5)

您可以使用安全域来解决这个问题,Wildfly可能会有一些特定的更改,但对于JBoss 7.1.1,这里是您需要做的。

  1. 在JBoss / Widlfy服务器中找到jboss-logging-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 -cp modules \ org \ jboss \ logging \ main \ jboss-logging-3.1.0.GA.jar; modules \ org \ picketbox \ main \ picketbox-4.0.7.Final.jar org.picketbox.datasource .security.SecureIdentityLoginModule PasswordXYZ

  5. 获取输出文本,并在standalone.xml中添加以下元素下的安全域:

    ConfigureAwait(false)
  6. 在数据源元素中使用此安全域,如下所示:

                <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>
    
  7. 参考链接:http://middlewaremagic.com/jboss/?p=1026

答案 1 :(得分:0)

这是不可能的。如果Web应用程序必须能够解密密码以使用数据库,则服务器上的任何人都可以执行相同的操作。

如果您想限制访问权限,请将服务器置于您的控制之下,让他们只能通过网络前端访问它。

(即使可以进行有用的加密,如果他们有服务器访问权限,他们可以轻松地将数据库文件复制到他们的工作站上,或者将新的用户帐户添加到数据库服务器中。)