2016-05-03 6 views
0

Ich muss unsere Grails-App mit AES-Verschlüsselung auf Oracle einrichten. In allen Java Beispiele, die ich Ihnen ein Properties-Objekt erstellen gesehen haben, eine OracleDataSource erstellen und setProperties nennen, etwa so:Hilfe bei der Konfiguration von Grails mit Oracle JDBC Thin Client Verschlüsselung

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); 

In Grails werden Verbindungen von DataSource.groovy behandelt, die eine BasicDataSource ist, und so, obwohl Sie können Eigenschaften leicht mit einem Verschluss wie folgt konfiguriert werden:

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 
} 

Alle Eigenschaften in diesem Verschluss Setter für BasicDataSource entsprechen, so dass Sie nicht nur die OracleConnection Eigenschaften dort schieben können.

Hat jemand eine Möglichkeit gefunden, Oracle-Verschlüsselung für Grails einzurichten? Ich würde jede mögliche Hilfe schätzen Sie

Brian geben kann

+0

Welche Version von Grails? –

Antwort

1

Die Datenquelle von Einstellungen in DataSource.groovy konfiguriert ist, aber nur, wenn es nicht bereits eine Spring-Bean konfiguriert ist, und es ist einfach ein sich in resources.groovy zu konfigurieren.

Eine Sache bewusst zu sein, dass, obwohl wir die dataSource Bohne verwenden, das ist ein Proxy der realen Bohne (eigentlich ein Proxy eines Proxy - ein, um sicherzustellen, dass die aktuelle Verbindung durch eine aktive Transaktion verwendet, um getConnection() Rückrufe Wenn einer vorhanden ist und ein anderer, der Datenbankinitialisierungsaufrufe vermeidet, wenn eine abgerufene gepoolte Verbindung nicht für eine Abfrage verwendet wird, bevor sie zurückgegeben wird, sollten Sie die Bean dataSourceUnproxied überschreiben, um die Vorteile der Proxys beizubehalten.

Ich habe keinen Zugriff auf eine Oracle-Instanz dies zu testen, aber es sollte zu schließen, was Sie brauchen:

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 = '...' 
    } 
} 

auf der Version des Treibers Je die Eigenschaftsnamen unterschiedlich sein könnten (zB properties anstelle von connectionProperties, cachingEnabled anstelle von implicitCachingEnabled, usw.) und Sie können weitere Eigenschaften entsprechend den verschiedenen verfügbaren Setter-Methoden, z fastConnectionFailoverEnabled = true für setFastConnectionFailoverEnabled(true).

Abhängig von der Version von Grails die konfigurierte dataSource ist wahrscheinlich ein Tomcat JDBC org.apache.tomcat.jdbc.pool.DataSource und kein commons-dbcp BasicDataSource; Die Änderung wurde for Grails 2.3 gemacht und frühere Versionen können das jdbc-pool Plugin (und sollten wegen seiner deutlich besseren Leistung) das jdbc-pool Plugin verwenden.

ich an der Quelle des Tomcat-JDBC-Treiber angesehen, wenn sie fragen könnte/sollte als die eigentlichen Datasource impl verwendet werden und es getConnection() auf den Oracle-Treiber aufrufen lassen und sah, dass es eine connectionProperties Eigenschaft unterstützt, die diese einfacher machen könnte. Es könnte möglich sein, die Verschlüsselungseigenschaften im unterstützten Format zu verketten und fügt hinzu, dass zu

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)' 
} 

Schauen Sie sich die Tomcat JDBC Pool docs für weitere Informationen.