Come si crea in modo sicuro un database MySQL e un utente tramite la riga di comando?

2

Sto creando un'app la cui funzionalità include la creazione di un database e il suo utente. Questo è realizzato in questo modo:

mysql -e "grant all on database.* to 'user'@'localhost' identified by '$PW';"

$PW è la password da utilizzare. Questo codice può essere trovato in uno script di shell che viene chiamato quando un utente della GUI fa clic su un pulsante specifico. Ma non è così insicuro, dal momento che la password viene inviata tramite la riga di comando? Come posso proteggere meglio la mia applicazione?

    
posta Marcus McLean 06.01.2016 - 22:53
fonte

3 risposte

1

But isn't that insecure,

Non esiste una scala assoluta di "sicurezza", anzi non è nemmeno una proprietà vettoriale o scalare. (IT) La sicurezza consiste nel garantire che la tua tecnologia non faccia cose che non è destinata a fare - pur continuando a fare le cose che dovrebbe. Questo è un modo molto lungo di dire che avresti dovuto dirci qual è il modello di minaccia.

Tralasciando le molte domande su come la tua applicazione resiste alla pasword e se ha bisogno di una password e il fatto che il tuo metodo dipende dall'utente root non che ha una password ....

Il tuo metodo attuale esporrà la password (brevemente) ad altri utenti tramite 'ps' su Unix / Linux (e probabilmente qualcosa di simile su MSWindows - non ci hai detto su quale sistema operativo si trova, ma il tag 'bash' tipo di implica Unix / Linux). E se è stato eseguito direttamente dalla riga di comando, sarà presente nei registri di controllo e nella cronologia della shell, anche se hai detto che era in uno script. Esistono potenziali percorsi e pseudonimi che una terza parte potrebbe utilizzare (se ha accesso) per sovvertire il comportamento, anche se sta iniziando a diventare un po 'esoterico.

Quindi considerando solo il problema descritto isolatamente e vincolato dagli unici strumenti disponibili bash, quindi:

echo "grant all on database.* to 'user'@'localhost' identified by '$PW';" | mysql

è leggermente migliore (per impostazione predefinita, echo è un built-in bash e quindi non avvia un nuovo processo con una riga di comando).

    
risposta data 01.08.2018 - 14:04
fonte
0

Presumibilmente, è possibile creare temporaneamente un file sul file system, nel qual caso, posizionare il grant all on ... by '$PW'; all'interno di un file leggibile solo dall'utente del processo e chiamare mysql eseguendo uno script in uno dei seguenti due modi:

mysql yourDBHere < yourScript.sql

mysql yourDBHere -e "source yourScript.sql"

Assicurati di pulire (elimina lo script) dopo aver terminato.

    
risposta data 07.01.2016 - 00:01
fonte
0

Non dire che questo è perfetto, ma qualcosa che ho messo insieme come parte di uno script che ho scritto per il backup / ripristino di Wordpress (incluso il DB) link qui :

#---------------------------------------------------------------------------------------
# Install MySQL and Dependencies
#---------------------------------------------------------------------------------------
echo -e "\n\n######### Installing mysql Server #########\n\n"
echo "INFO: Installing mysql-server"
sudo -E apt-get -q -y install mysql-server >>$LOGFILE  #non-interactive mysql installation

#Some security cleaning up on mysql-----------------------------------------------------
sudo mysql -u root -e "DELETE FROM mysql.user WHERE User='';"
echo "INFO: Setting password for root user to $DBPASS"
sudo mysql -u root -e "UPDATE mysql.user SET authentication_string=PASSWORD('$DBPASS') WHERE User='root';"
sudo mysql -u root -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');"
sudo mysql -u root -e "DROP DATABASE IF EXISTS test;"
sudo mysql -u root -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%';"
sudo mysql -u root -e "FLUSH PRIVILEGES;"

#Create DB for Wordpress with user------------------------------------------------------
echo "INFO: Creating Database with name $WPDBNAME"
sudo mysql -u root -e "CREATE DATABASE IF NOT EXISTS $WPDBNAME;"
echo "INFO: Granting Permission to $WPDBUSER with password: $WPDBPASS"
sudo mysql -u root -e "GRANT ALL ON *.* TO '$WPDBUSER'@'localhost' IDENTIFIED BY '$WPDBPASS';"
sudo mysql -u root -e "FLUSH PRIVILEGES;"

#Setup permission for my.cnf propery----------------------------------------------------
sudo chmod 644 /etc/mysql/my.cnf
    
risposta data 03.04.2018 - 10:09
fonte

Leggi altre domande sui tag