2015-12-01 5 views
0

У меня есть дикая природа 8.2.0. Я использую два источника данных оракула, один < источник данных > и один < xa-datasource >. Я хочу, чтобы мои пароли БД были зашифрованы и им удалось это сделать для источника данных, используя домен безопасности, но не для источника данных xa-datasource. Я не нашел документов или других сообщений с решением этой проблемы.wildfly: Как использовать зашифрованный пароль для xa-datasource?

Вот что я сделал:

 <datasources> 
      <datasource jta="false" jndi-name="java:/myproject/jdbc/datasources/jdbc" pool-name="my_JDBC_DS" enabled="true" use-ccm="false"> 
       <connection-url>jdbc:oracle:thin:@localhost:1521:DB</connection-url> 
       <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> 
       <driver>oracle</driver> 
       <pool> 
        <min-pool-size>1</min-pool-size> 
        <max-pool-size>50</max-pool-size> 
       </pool> 
       <security> 
        <security-domain>databaseSecure</security-domain> 
       </security> 
       <validation> 
        <check-valid-connection-sql>select 1 from dual</check-valid-connection-sql> 
        <validate-on-match>true</validate-on-match> 
        <background-validation>false</background-validation> 
       </validation> 
      </datasource> 
      <xa-datasource jndi-name="java:/myproject/jdbc/datasources/db_tx" pool-name="MYTXDS" enabled="true" use-ccm="false"> 
       <xa-datasource-property name="URL"> 
        jdbc:oracle:thin:@localhost:1521:DB 
       </xa-datasource-property> 
       <xa-datasource-property name="User"> 
        scott 
       </xa-datasource-property> 
       <xa-datasource-property name="Password"> 
        tiger 
       </xa-datasource-property> 
       <driver>oracle</driver> 
       <security> 
        <user-name>scott</user-name> 
        <password>tiger</password> 
       </security> 
       <xa-pool> 
        <min-pool-size>1</min-pool-size> 
        <max-pool-size>50</max-pool-size> 
        <wrap-xa-resource>false</wrap-xa-resource> 
       </xa-pool> 
       <validation> 
        <check-valid-connection-sql>select 1 from dual</check-valid-connection-sql> 
        <validate-on-match>true</validate-on-match> 
        <background-validation>false</background-validation> 
       </validation> 
       <statement> 
        <prepared-statement-cache-size>32</prepared-statement-cache-size> 
        <share-prepared-statements>true</share-prepared-statements> 
       </statement> 
      </xa-datasource> 
      <drivers> 
       <driver name="oracle" module="oracle"> 
        <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class> 
       </driver> 
      </drivers> 
     </datasources> 
... 
      <security-domain name="databaseSecure" cache-type="default"> 
       <authentication> 
        <login-module code="org.picketbox.datasource.security.SecureIdentityLoginModule" flag="required"> 
         <module-option name="username" value="scott"/> 
         <module-option name="password" value="-170dd0fbd8c13748"/> 
        </login-module> 
       </authentication> 
      </security-domain> 

Я попытался удалить записи ха-DataSource-свойства для пользователя и пароля, и со ссылкой на безопасность-домен и вложенные в безопасности теге и на том же уровне, что и свойства. Обе попытки не сработали, а последняя дикая фолда уходит рано из-за проблем, анализирующих файл standalone.xml, при этом последнее не удается выполнить.

Чтобы показать наиболее перспективные попытки, это, как я пытался обратиться к безопасности-домена:

<xa-datasource jndi-name="java:/myproject/jdbc/datasources/db_tx" pool-name="MYTXDS" enabled="true" use-ccm="false"> 
      <xa-datasource-property name="URL"> 
       jdbc:oracle:thin:@localhost:1521:DB 
      </xa-datasource-property> 
      <driver>oracle</driver> 
      <security> 
       <security-domain>databaseSecure</security-domain> 
      </security> 
      <xa-pool> 
       <min-pool-size>1</min-pool-size> 
       <max-pool-size>50</max-pool-size> 
       <wrap-xa-resource>false</wrap-xa-resource> 
      </xa-pool> 
      <validation> 
       <check-valid-connection-sql>select 1 from dual</check-valid-connection-sql> 
       <validate-on-match>true</validate-on-match> 
       <background-validation>false</background-validation> 
      </validation> 
      <statement> 
       <prepared-statement-cache-size>32</prepared-statement-cache-size> 
       <share-prepared-statements>true</share-prepared-statements> 
      </statement> 
     </xa-datasource> 

Делая что wildfly работает в javax.resource.ResourceException: No matching credentials in Subject! Я отлажено в код, и, хотя я Мне не хватает кода для последних нескольких классов в стеке вызовов. Я вижу, что объект фактически имеет учетные данные как свойства, но все же вызов AccessController.doPrivileged завершается с ошибкой, что приводит к вышеупомянутому исключению.

Вы видите, что я потерян, любые предложения?

ответ

1

Я понял, что я сделал не так (отладка дикой природы и пристально глядя на мой рабочий JBoss 4 config ..). В моей конфигурации домена безопасности я установил только имя пользователя и пароль. Чтобы он работал, мне также нужно было объявить «managedConnectionFactoryName» и объявить домен безопасности для каждого источника данных.

я теперь имеют следующую конфигурацию:

<datasources> 
     <datasource jta="false" jndi-name="java:/myproject/jdbc/datasources/jdbc" pool-name="my_JDBC_DS" enabled="true" use-ccm="false"> 
      <connection-url>jdbc:oracle:thin:@localhost:1521:DB</connection-url> 
      <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> 
      <driver>oracle</driver> 
      <pool> 
       <min-pool-size>1</min-pool-size> 
       <max-pool-size>50</max-pool-size> 
      </pool> 
      <security> 
       <security-domain>jdbcDatabaseSecure</security-domain> 
      </security> 
      <validation> 
       <check-valid-connection-sql>select 1 from dual</check-valid-connection-sql> 
       <validate-on-match>true</validate-on-match> 
       <background-validation>false</background-validation> 
      </validation> 
     </datasource> 
     <xa-datasource jndi-name="java:/myproject/jdbc/datasources/db_tx" pool-name="MYTXDS" enabled="true" use-ccm="false"> 
      <xa-datasource-property name="URL"> 
       jdbc:oracle:thin:@localhost:1521:DB 
      </xa-datasource-property> 
      <driver>oracle</driver> 
      <security> 
       <security-domain>txDatabaseSecure</security-domain> 
      </security> 
      <xa-pool> 
       <min-pool-size>1</min-pool-size> 
       <max-pool-size>50</max-pool-size> 
       <wrap-xa-resource>false</wrap-xa-resource> 
      </xa-pool> 
      <validation> 
       <check-valid-connection-sql>select 1 from dual</check-valid-connection-sql> 
       <validate-on-match>true</validate-on-match> 
       <background-validation>false</background-validation> 
      </validation> 
      <statement> 
       <prepared-statement-cache-size>32</prepared-statement-cache-size> 
       <share-prepared-statements>true</share-prepared-statements> 
      </statement> 
     </xa-datasource> 
     <drivers> 
      <driver name="oracle" module="oracle"> 
       <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class> 
      </driver> 
     </drivers> 
    </datasources> 
    ... 
     <security-domain name="jdbcDatabaseSecure" cache-type="default"> 
      <authentication> 
       <login-module code="org.picketbox.datasource.security.SecureIdentityLoginModule" flag="required"> 
        <module-option name="username" value="scott"/> 
        <module-option name="password" value="-170dd0fbd8c13748"/> 
        <module-option name = "managedConnectionFactoryName" value="jdbcDatabaseSecure" /> 
       </login-module> 
      </authentication> 
     </security-domain> 
     <security-domain name="txDatabaseSecure" cache-type="default"> 
      <authentication> 
       <login-module code="org.picketbox.datasource.security.SecureIdentityLoginModule" flag="required"> 
        <module-option name="username" value="scott"/> 
        <module-option name="password" value="-170dd0fbd8c13748"/> 
        <module-option name = "managedConnectionFactoryName" value="txDatabaseSecure" /> 
       </login-module> 
      </authentication> 
     </security-domain> 

И теперь он работает.

0

У меня была такая же проблема при попытке настроить xa-datasource с зашифрованными доменами безопасности. После некоторого времени я сконфигурировал шифрование хранилища, как описано в этом руководстве https://developer.jboss.org/wiki/JBossAS7SecuringPasswords, и он успешно работает с источниками данных и xa-datasources.

Надеюсь, это поможет.

0

я отключил кэширование безопасности-домена путем удаления кэш-типа = «по умолчанию» из-безопасности домена в standalone.xml и это работает для меня Это происходит, когда несколько источников данных определяются в поддержке того же домена безопасности, - Либо сделайте separe security-domain для каждого источника данных или - если домен безопасности должен использоваться с несколькими источниками данных, тогда для этого домена не должно быть включено кэширование, это означает, что каждый раз, когда парольный пароль получен из домена безопасности, он будет новый экземпляр и сделать это, удалите кеш-тип = «по умолчанию» из домена безопасности в standalone.xml

Литература: https://community.appian.com/support/w/kb/299/kb-1074-cannot-open-connection-caused-by-javax-resource-resourceexception-no-matching-credentials-in-subject-error-thrown-during-jboss-startup

https://bugzilla.redhat.com/show_bug.cgi?id=1103684

Смежные вопросы