Sono state inviate le credenziali as command arguments? Ecco un esempio di come si potrebbe farlo:
suppressPackageStartupMessages(library("argparse"))
# create parser object
parser <- ArgumentParser()
# specify our desired options
# by default ArgumentParser will add an help option
parser$add_argument("-v", "--verbose", action="store_true", default=TRUE,
help="Print extra output [default]")
parser$add_argument("-q", "--quietly", action="store_false",
dest="verbose", help="Print little output")
parser$add_argument("-c", "--count", type="integer", default=5,
help="Number of random normals to generate [default %(default)s]",
metavar="number")
parser$add_argument("--generator", default="rnorm",
help = "Function to generate random deviates [default \"%(default)s\"]")
parser$add_argument("--mean", default=0, type="double", help="Mean if generator == \"rnorm\" [default %(default)s]")
parser$add_argument("--sd", default=1, type="double",
metavar="standard deviation",
help="Standard deviation if generator == \"rnorm\" [default %(default)s]")
# get command line options, if help option encountered print help and exit,
# otherwise if options not found on command line then set defaults,
args <- parser$parse_args()
# print some progress messages to stderr if "quietly" wasn't requested
if (args$verbose) {
write("writing some verbose output to standard error...\n", stderr())
}
# do some operations based on user input
if(args$generator == "rnorm") {
cat(paste(rnorm(args$count, mean=args$mean, sd=args$sd), collapse="\n"))
} else {
cat(paste(do.call(args$generator, list(args$count)), collapse="\n"))
}
cat("\n")
corsa del campione (senza parametri):
usage: example.R [-h] [-v] [-q] [-c number] [--generator GENERATOR] [--mean MEAN] [--sd standard deviation]
optional arguments:
-h, --help show this help message and exit
-v, --verbose Print extra output [default]
-q, --quietly Print little output
-c number, --count number
Number of random normals to generate [default 5]
--generator GENERATOR
Function to generate random deviates [default "rnorm"]
--mean MEAN Mean if generator == "rnorm" [default 0]
--sd standard deviation
Standard deviation if generator == "rnorm" [default 1]
Il pacchetto è stato a quanto pare ispirato dal pacchetto python con lo stesso nome, in modo da looking there possono essere anche utile.
Guardando il codice, probabilmente sarei riscrivere come segue:
library(RJDBC)
library(argparse)
args <- ArgumentParser()
args$add_argument('--driver', dest='driver', default="com.vertica.jdbc.Driver")
args$add_argument('--classPath', dest='classPath', default="/home/Drivers/vertica-jdbc-7.0.1-0.jar")
args$add_argument('--url', dest='url', default="jdbc:vertica://servername:5433/db")
args$add_argument('--user', dest='user', default='username')
args$add_argument('--password', dest='password', default='password')
parser <- args$parse_args
vDriver <- JDBC(driverClass=parser$driver, parser$classPath)
vertica <- dbConnect(vDriver, parser$url, parser$user , parser$password)
# continue here
Non sono sicuro che si possa andare oltre l'offuscamento. Potrebbe essere d'aiuto se fornisci maggiori informazioni sul perché non crei utenti separati per i tuoi clienti. – bdecaf
Tutto questo è stato eseguito su una macchina condivisa o il codice è stato distribuito da qualche parte? E le variabili di base della shell? – Visser
@bdecaf: i dati sono sensibili e voglio solo che abbiano accesso in lettura. Se creo credenziali utente separate, dovrebbero essere in grado di scaricare i dati sul loro computer locale. L'idea è di proteggere le credenziali di connettività del database in modo che possano leggere i dati solo da un server su cui è distribuito questo codice. – Jana