Comment puis-je permettre rapache / infusion de se connecter en toute sécurité à une base de données MySQL?

StackOverflow https://stackoverflow.com/questions/7303004

  •  22-10-2019
  •  | 
  •  

Question

Je développe une application web en utilisant rapache et brasser. Dans le code R, je veux utiliser le package rmysql pour interroger une base de données MySQL, mais je me demande la meilleure façon d'accéder aux informations de connexion pour la base de données à partir du script R.

quelques suggestions pour un problème similaire avec PHP , une pensée a été de faire ce qui suit dans une session interactive pour enregistrer les détails de connexion à un fichier en dehors du /var/www:

con <- dbConnect(MySQL(), dbname = "mydb", user = "myuser", pass = "mypass")
save(con, file = "/home/myuser/sqlconnect.rda")

Et puis dans le script exécuté par rapache / brew, chargez le fichier .rda:

<%
load("/home/myuser/sqlconnect.rda")
query <- "MY QUERY"
result <- dbGetQuery(con, query)
%>

Je n'ai pas encore essayé cette approche. Je ne suis même pas sûr que mon fichier sqlconnect.rda contiendra toutes les informations dont il a besoin de se connecter.

Y at-il un moyen de mettre plus en sécurité la déclaration dbConnect()?

Mise à jour

Enregistrer la sortie dbConnect() à un fichier ne fonctionne pas, parce que la connexion a expiré. Cependant, sourceing un fichier .R de mon répertoire utilisateur contenant

library(RMySQL)
con <- dbConnect(MySQL(), dbname = "mydb", user = "myuser", pass = "mypass")

fonctionne.

Cependant, je ne sais pas comment sécuriser cette approche est.

Était-ce utile?

La solution

Bien que je ne vois pas pourquoi votre suggestion sécurité coup de pouce par rapport à avoir le nom d'utilisateur / mot de passe dans le fichier de script R, vous pouvez stocker les paramètres de votre fonction dbConnect. Exemple:

con.details <- list("MySQL", dbname = "mydb", user = "myuser", pass = "mypass")
save(con.details, file='/nonpub/con.details')

Et en utilisant ces paramètres dans vos fichiers Brew:

load('/nonpub/con.details')
con <- do.call(dbConnect, con.details)

Comme vous utilisez Rapache, le chargement con.details sur chaque course juste ne fait pas de sens, je préfère mettre cette ligne dans REvalOnStartup, ce qui pourrait également vous faire économiser de ce problème de save/load:)

Je suggère donc d'ajouter library(RMySQL); con.details <- list("MySQL", dbname = "mydb", user = "myuser", pass = "mypass") au démarrage Rapache et utiliser cette liste de paramètres dans les scripts de brassage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top