2011-11-04 1 views
10

mi sto nascondendo la password del database in datasource.groovy facendonascondere password del database utilizzando le specifiche codec in datasource.groovy non funziona

dataSource { 
pooled = true 
driverClassName = "com.mysql.jdbc.Driver" 
username = "root" 
password = "q59YgJCdHw3dshwlsa==" 
passwordEncryptionCodec = DESCodec 
dbname="mydbname" 
} 

seguito l'artilce: http://jira.grails.org/browse/GRAILS-3620

corro nella classe codec groove separatamente per ottenere la stringa crittografata in questo modo: groovy grails-app/utils/DESCodec.groovy mypassword_string_text.

Ma dopo aver inserito la classe DESCodec nel pacchetto Utility in Grails, quando provo ad avviare il server, non si avvia ma si interrompe direttamente, Si avvia quando inserisco direttamente la password corretta e commentando il codec e la stringa crittografata. Presumo che non stia trovando la classe codec/qualsiasi altra cosa che mi manca nella configurazione come specificare che la classe codec richiede virgolette o qualsiasi cambiamento di percorso o dovrei cambiare l'algoritmo, dal momento che la classe DESCodec è l'ultima classe codec nel collegamento.

Sto lavorando per ottenere la configurazione specifica dell'ambiente ed esternalizzata, ma ho ancora bisogno della password per essere crittografata qui e quindi decrittografata prima di connettermi al database.

+0

Ho spostato la classe Descodec nella directory utility/gra/reports e importando la classe nel datasource.groovy come import gra.reports.Descodec, non è ancora funzionante .. –

risposta

13

Penso che il modo migliore per farlo sia esternalizzare la configurazione specifica dell'ambiente (in particolare password, ma anche URL, indirizzi e-mail e così via) e quindi proteggere il file di configurazione con le autorizzazioni appropriate sul file system del computer di destinazione.

In Config.groovy (per esempio):

grails.config.locations = [ 
    "file:/etc/${appName}/conf/db.properties" 
] 

e nel file di configurazione:

dataSource.username = "root" 
dataSource.password = "secret" 

Io di solito faccio questo per config produzione, ma mantenere dev/test config nella Config .groovy per comodità. Quando si esegue in dev/test si ottiene semplicemente un avviso all'avvio se non riesce a trovare il file di configurazione di riferimento. Se lo trova, allora sostituirà ciò che è in Config.groovy

Questo ha il vantaggio aggiuntivo di non richiedere che il file di guerra venga ricompilato e ridistribuito in caso di modifiche alla configurazione dell'ambiente di produzione, basta semplicemente modificare il file di configurazione e riavviare l'applicazione.

+0

grazie per averlo condiviso! – Chris

+0

grazie per il suggerimento! –

+0

Ciao Darrend, accetto che esternalizzare le variabili sia la strada da percorrere ma voglio comunque che la stringa della password venga crittografata anche nella posizione esterna. –