Soluzione 1:
Sia per MySQL che per PostgreSQL è possibile specificare utente e password nel file di configurazione locale. .my.cnf per MySQL e .pgpass per PostgreSQL. Questi file dovrebbero trovarsi nella tua home directory (ad es. ~/.my.cnf).
.my.cnf:
[mysql]
user=user
password=password
.pgpass:
host:port:database:user:password
Puoi avere una voce jolly qui, sostituendo qualsiasi campo per *******.
PS:NON SPECIFICARE MAI UNA PASSWORD NELLA RIGA DI COMANDO! Questo può essere perfettamente visibile con ps se il tuo sistema non è configurato per non mostrare i processi che appartengono ad altri utenti.
@thinice:se vuoi creare quei file davvero sicuri dovresti fare:
umask 077
touch .my.new.config
umask 022 # or whatever was your default
In questo modo il file verrebbe creato con autorizzazioni sicure fin dall'inizio e nessun intercettatore avrebbe la possibilità di carpire la tua password.
PostgreSQL rifiuterà comunque di utilizzare il file con autorizzazioni superiori a 0600.
Soluzione 2:
mysql_config_editor set --login-path=storedPasswordKey --host=localhost --user=root --password
Come eseguo una riga di comando con una password sicura??usa l'editor di configurazione!!!
A partire da mysql 5.6.6 puoi memorizzare la password in un file di configurazione e quindi eseguire comandi cli come questo....
mysql --login-path=storedPasswordKey ....
--login-path sostituisce le variabili... host, utente E password.ottimo giusto!
Soluzione 3:
Non mettere le virgolette intorno alla password perché se lo fai le virgolette sono considerate parte della password.
Soluzione 4:
MYSQL_USER="root"
MYSQL_PASSWORD="PASSWORD"
DBNAME="DB_NAME"
mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "CREATE DATABASE $DBNAME;" 2> /tmp/error1
STATUS=$?
if [ $STATUS -eq 0 ];
then
echo -e "Database '$DBNAME' is created"
elif (grep -i "^ERROR 1007" /tmp/error1 > /dev/null);
then
echo -e "Database '$DBNAME' already exists"
else
echo -e "Failed to create database '$DBNAME'"
fi
rm -r /tmp/error1
Questo farà il trucco, grazie