2015-12-01 32 views
0

我有一個蜻蜓8.2.0.Final跑步。我使用兩個oracle數據源,一個<數據源>和一個< xa-datasource >。我想要加密我的數據庫密碼,並設法使用安全域爲數據源執行此操作,但不能爲xa數據源執行此操作。 我還沒有找到文檔或其他貼子解決這個問題。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> 

我已經試過了用戶名和密碼去掉XA-數據源屬性條目並參照安全域都嵌套在安全標籤和與屬性相同。這兩種嘗試都不起作用,後者由於解析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

我知道我做錯了什麼(通過調試wildfly並盯着我的工作JBoss 4配置..)。 在我的安全域配置中,我只設置了用戶名和密碼。爲了使它工作,我需要爲「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數據源。

希望這會有所幫助。

0

我從安全域standalone.xml移除緩存類型=「默認」和它的作品對我來說 出現這種情況,其中多個數據源定義是由同一個安全域, 支持安全域的禁用緩存 - 要麼爲每個數據源創建separte安全域,要麼爲每個數據源創建separte安全域,或者如果安全域要與多個數據源一起使用,則不應爲該域啓用緩存,這意味着每次從安全域獲得PasswordCredential時,它都將成爲新實例並執行此操作從standalone.xml中的security-domain刪除cache-type =「default」

參考文獻: 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