Come posso permettere Rapache / birra per connettersi in modo sicuro a un database MySQL?
Domanda
Sto sviluppando un'applicazione web utilizzando Rapache e birra. All'interno del codice R, voglio usare il pacchetto RMySQL per interrogare un database MySQL, ma io sono in discussione il modo migliore per accedere ai dettagli di login per il database da all'interno dello script R.
A seguito di alcuni suggerimenti per un problema simile con PHP , un pensiero è stato quello di effettuare le seguenti operazioni in una sessione interattiva per salvare i dettagli della connessione a un file al di fuori della /var/www
:
con <- dbConnect(MySQL(), dbname = "mydb", user = "myuser", pass = "mypass")
save(con, file = "/home/myuser/sqlconnect.rda")
E poi nello script gestito da Rapache / birra, caricare il file .rda
:
<%
load("/home/myuser/sqlconnect.rda")
query <- "MY QUERY"
result <- dbGetQuery(con, query)
%>
Non ho ancora provato questo approccio. Io non sono nemmeno sicuro che il mio file sqlconnect.rda
conterrà tutte le informazioni di cui ha bisogno per la connessione.
C'è un modo più sicuro per impostare la dichiarazione dbConnect()
?
Aggiorna
Salvataggio l'uscita dbConnect()
a un file non funziona, perché la connessione è scaduta. Tuttavia, source
ing un file .R
dalla mia directory utente contenente
library(RMySQL)
con <- dbConnect(MySQL(), dbname = "mydb", user = "myuser", pass = "mypass")
funziona.
Comunque, io non so come sicuro questo approccio è.
Soluzione
Anche se io non vedo il motivo per cui sarebbe la vostra sicurezza spinta suggerimento rispetto ad avere username / password nel file di script R, è possibile memorizzare i parametri della vostra funzione dbConnect
. Esempio:
con.details <- list("MySQL", dbname = "mydb", user = "myuser", pass = "mypass")
save(con.details, file='/nonpub/con.details')
E l'utilizzo di questi parametri nei file BREW:
load('/nonpub/con.details')
con <- do.call(dbConnect, con.details)
Come si utilizza Rapache, carico con.details
su ogni corsa semplicemente non ha alcun senso, avrei preferito mettere quella linea in REvalOnStartup
, che potrebbe anche risparmiare questo problema save/load
:)
Quindi suggerisco di aggiungere library(RMySQL); con.details <- list("MySQL", dbname = "mydb", user = "myuser", pass = "mypass")
a Rapache avvio e utilizzare tale elenco di parametri negli script birra.