2015-11-05 4 views
0

Я бы хотел передать веб-приложение некоторым людям, но этим людям не разрешено иметь доступ к базе данных с помощью некоторых инструментов. Используя webapplicaton, и в фоновом режиме база данных в порядке.Wildfly: Шифровать пароль и имя пользователя для базы данных

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> 

Как вы можете видеть, есть также имя пользователя и пароль доступны. Как можно исключить/зашифровать их, поэтому только администратор знает пароль для базы данных. То же самое и для всего сервера приложений - есть также пользователи и пароль. Как я могу это сделать?

EDIT: «Клиент» получит все приложение, включая конфигурацию веб-сервера. (Wilfly и .war - файл) Это только для сохранения программного ключа в базе данных. В первый раз, когда «клиент» запустит веб-приложение, ему будет предложено ввести ключ лицензии. После ввода лицензионного ключа вызывается Webservice. Код возврата - «false» или «true» (ключевой действует или недействителен ключ) Моя первая идея состояла в том, чтобы сохранить флаг в базе данных. Но если пользователь имеет доступ к базе данных, он может самостоятельно манипулировать этим флагом. Есть ли другая возможность установить флаг для «ключа программного обеспечения», вместо этого сохраните флаг в базе данных. Любые идеи?

ответ

-1

Невозможно. Если веб-приложение должно иметь возможность расшифровать пароль для использования базы данных, любой пользователь на сервере может сделать то же самое.

Если вы хотите ограничить доступ, держите сервер под своим контролем и разрешите им доступ к нему только через веб-интерфейс.

(И даже если бы можно было с пользой зашифровать, если у них есть доступ к серверу, они могут тривиально копировать файлы базы данных на свои рабочие станции или добавлять новые учетные записи пользователей на сервер базы данных).

+0

Я отредактировал мой первый пост, любые идеи для этого? – internet

+0

Домены безопасности JBoss - хороший вариант для решения этой проблемы. – mod

3

Вы можете использовать домен безопасности, чтобы преодолеть это, это может быть некоторые конкретные изменения для Wildfly, но для JBoss 7.1.1 вот что вам нужно сделать.

  1. Найти местоположение JBoss-лесозаготовительной-3.1.0.GA.jar на сервере JBoss/Widlfy. В случае JBoss 7.1.1 это должно быть что-то вроде: modules \ org \ jboss \ logging \ main \ jboss-logging-3.1.0.GA.jar

  2. Найти местоположение пикетирования4.0.7.Final .jar

  3. Проверьте, есть ли в банке пикетирования класс org.picketbox.datasource.security.SecureIdentityLoginModule.

  4. Выполните следующую команду из корневого сервера JBoss папки для шифрования DATASOURCE СОЕДИНЕНИЯ пароля

    Java -cp модули \ орг \ JBoss \ Logging \ главной \ 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

Нет смысла - он зашифрован с фиксированным паролем, вы можете получить decrypter [отсюда] (https://raw.githubusercontent.com/usefulfor/usefulfor/master/security/JBoss.java). Там есть [открытая ошибка для JBOSS] (https://issues.jboss.org/browse/JBAS-4460), и она помечена 'wont fix', потому что * *« Пароль для шифрования базы данных »существует для прохождения глупых проверок безопасности В конце концов, где-то будет какой-то пароль, потому что системе необходимо дешифровать пароль для отправки его в базу данных. Для опытного программиста всегда будет легко взломать это. * " – TessellatingHeckler