2016-05-03 5 views
0

GrailsアプリケーションをAES暗号化でOracleに設定する必要があります。私はあなたがPropertiesオブジェクトを作成し、のOracleDataSourceを作成し、setPropertiesメソッドを呼び出して見てきたすべてのJavaの例では、そのよう:GrailsのでOracle JDBCシンクライアントでGrailsを設定する際の助けが必要です

OracleDriver dr = new OracleDriver(); 
Properties prop = new Properties(); 
prop.setProperty(OracleConnection.CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_LEVEL,AnoServices.ANO_REQUIRED); 
// set more 
(OracleConnection)dr.connect(url,prop); 

、接続がのBasicDataSourceあるDataSource.groovy、によって処理され、そうであるがされています次のような閉鎖で簡単にプロパティを設定することができます。

myDatasource { 
pooled = false 
driverClassName = "oracle.jdbc.OracleDriver" 
dbCreate = "validate" // one of 'create', 'create-drop', 'update', 'validate', '' 
dialect = "org.hibernate.dialect.Oracle10gDialect" 
username = username 
password = password 
url =  url 
logSql = true 
format_sql = true 
pooled = true 
properties { 
    maxActive = 8 
    maxIdle = 4 
    minIdle = 1 
    initialSize = 1 
    minEvictableIdleTimeMillis = 60000 
    timeBetweenEvictionRunsMillis = 60000 
    maxWait = 10000 
    validationQuery = "select 1 from dual" 
    testOnBorrow=true 
    testWhileIdle=true 
    testOnReturn=true 
} 

その閉鎖のプロパティのすべてがのBasicDataSource用セッターに対応するので、あなたはただそこにOracleConnectionのプロパティを押し込むことはできません。

誰でもGrailsのOracle暗号化を設定する方法はありますか?私はあなたがデータソースがDataSource.groovyの設定から設定されているが、構成のSpring Beanがすでに存在しない場合にのみ、resources.groovyに1を自分で設定するのは簡単です

ブライアン

+0

Grailsのどのバージョンですか? –

答えて

1

を与えることができます任意の助けをいただければ幸いです。

私たちはdataSource beanを使用していますが、これは実際のbeanのプロキシです(実際にはプロキシのプロキシ - getConnection()への呼び出しがアクティブなトランザクションで使用される現在の接続を確実に返すものです)取得されたプールされた接続が返される前にクエリに使用されない場合、データベース初期化呼び出しを回避する別のもの)を使用して、プロキシの利点を保持するためにdataSourceUnproxied beanをオーバーライドする必要があります。

私はこれをテストするために、Oracleインスタンスへのアクセスを持っていないが、それはあなたが必要なものに近いものでなければならない:

import oracle.jdbc.OracleConnection 
import oracle.jdbc.pool.OracleDataSource 
import oracle.net.ano.AnoServices 

beans = { 

    def props = [ 
     (OracleConnection.CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_LEVEL): AnoServices.ANO_REQUIRED, 
     (OracleConnection.CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_TYPES): '(' + AnoServices.ENCRYPTION_AES256 + ')', 
     (OracleConnection.CONNECTION_PROPERTY_THIN_NET_CHECKSUM_LEVEL): AnoServices.ANO_REQUESTED, 
     (OracleConnection.CONNECTION_PROPERTY_THIN_NET_CHECKSUM_TYPES): '(' + AnoServices.CHECKSUM_SHA1 + ')'] 

    dataSourceUnproxied(OracleDataSource) { 
     connectionProperties = props as Properties 
     implicitCachingEnabled = true 
     password = '...' 
     delegate.URL = '...' // can't use URL = '...' because of Groovy's default import of java.net.URL 
     user = '...' 
    } 
} 

は、ドライバのバージョンによってはプロパティ名は、例えば(異なる場合がありますpropertiesconnectionPropertiesの代わりに、implicitCachingEnabledの代わりに​​など)、必要に応じて利用可能なさまざまなセッターメソッドに応じて追加のプロパティを設定できます。 setFastConnectionFailoverEnabled(true)の場合はfastConnectionFailoverEnabled = trueです。

設定されたdataSourceのバージョンによっては、おそらくTomcat JDBC org.apache.tomcat.jdbc.pool.DataSourceであり、コモンズdbcp BasicDataSourceではなく、変更したfor Grails 2.3とそれ以前のバージョンは、jdbc-poolプラグインを使用することができます(パフォーマンスが大幅に向上するため)。

は、私はそれは/本物のDataSource IMPLとして使用する必要がありますができれば不思議とそれがOracleドライバに getConnection()を呼び出すせTomcatのJDBCドライバのソースを見て、それが、この単純になるかもしれない connectionPropertiesプロパティをサポートしていることを見ました。サポートされている形式で暗号化プロパティを連結し、詳細は Tomcat JDBC Pool docsをチェック

dataSource { 
    driverClassName = 'oracle.jdbc.OracleDriver' 
    username = '...' 
    ... 
    connectionProperties = 'oracle.net.encryption_types_client=(AES256);' + 
          'oracle.net.encryption_client=REQUIRED;' + 
          'oracle.net.crypto_checksum_client=REQUESTED;' + 
          'oracle.net.crypto_checksum_types_client=(SHA1)' 
} 

にそれを追加することが可能かもしれません。

関連する問題