Je construis un script Bash pour certaines tâches. L'une de ces tâches consiste à créer une base de données MySQL à partir du même script bash. Ce que je fais en ce moment est de créer deux vars: un pour le nom d'utilisateur du magasin et l'autre pour le mot de passe du magasin. Ceci est la partie pertinente de mon script:
MYSQL_USER=root
MYSQL_PASS=mypass_goes_here
touch /tmp/$PROY.sql && echo "CREATE DATABASE $DB_NAME;" > /tmp/script.sql
mysql --user=$MYSQL_USER --password="$MYSQL_PASS" < /tmp/script.sql
rm -rf /tmp/script.sql
Mais obtenez toujours une erreur disant que l'accès est refusé à l'utilisateur root avec NO PASSWORD, qu'est-ce que je fais mal? Je dois faire de même pour PostgreSQL.
linux
mysql
bash
postgresql
shell-scripting
ReynierPM
la source
la source
echo "$MYSQL_PASS"
avant de le passer à lamysql
ligne. At-il le bon mot de passe?ps wwaux
.Réponses:
Pour MySQL et PostgreSQL, vous pouvez spécifier votre utilisateur et votre mot de passe dans le fichier de configuration local. .my.cnf pour MySQL et .pgpass pour PostgreSQL. Ces fichiers doivent se trouver dans votre répertoire personnel (c'est-à-dire ~ / .my.cnf).
.my.cnf:
.pgpass:
Vous pouvez avoir une entrée générique ici, en remplaçant n'importe quel champ par *******.
PS: NE SPÉCIFIEZ JAMAIS UN MOT DE PASSE SUR LA LIGNE DE COMMANDE! Cela peut être parfaitement visible avec ps si votre système n'est pas configuré pour ne pas afficher les processus appartenant à d'autres utilisateurs.
@thinice: Si vous voulez créer ces fichiers vraiment sécurisés, vous devez faire:
De cette façon, le fichier serait créé avec des autorisations sécurisées dès le départ et aucune écoute indiscrète n'aurait la moindre chance de récupérer votre mot de passe.
PostgreSQL refusera de toute façon d'utiliser le fichier avec des autorisations supérieures au 0600.
la source
--defaults-extra-file=filename
. Cela peut être utile si vous souhaitez le placer dans un endroit non standard ou simplement créer un fichier temporaire. Est suspect que c'est une option similaire avec PostgreSQL, mais je ne connais pas cela.0600
Cela fera l'affaire Merci
la source
Comment exécuter une ligne de commande avec un mot de passe sécurisé ?? utilisez l'éditeur de configuration !!!
Depuis mysql 5.6.6, vous pouvez stocker le mot de passe dans un fichier de configuration, puis exécuter des commandes cli comme celle-ci ....
--login-path remplace les variables ... hôte, utilisateur ET mot de passe. excellent droit!
la source
assurez-vous comment vous écrivez votre laissez-passer et il ne s'échappe pas
--defaults-extra-file = est une bonne chose (tm) (c)
la source
Ne mettez pas de guillemets autour du mot de passe, car si vous le faites, les guillemets sont considérés comme faisant partie du mot de passe.
la source
Une question similaire existe sur StackOverflow.
Pour résumer ma réponse à partir de là.
Tu peux
export MYSQL_PWD=yourverysecretpassword
.L'avantage de cette méthode par rapport à l'utilisation d'un fichier de configuration est que vous n'avez pas besoin d'un fichier de configuration distinct pour rester synchronisé avec votre script. Vous n'avez que le script à maintenir.
Il n'y a aucun inconvénient à cette méthode.
Le mot de passe n'est pas visible pour les autres utilisateurs du système (il serait visible s'il se trouve sur la ligne de commande). Les variables d'environnement ne sont visibles que par l'utilisateur exécutant la commande mysql et root.
Le mot de passe sera également visible par toute personne pouvant lire le script lui-même, alors assurez-vous que le script lui-même est protégé. Ce n'est en rien différent de la protection d'un fichier de configuration. Vous pouvez toujours obtenir le mot de passe à partir d'un fichier séparé si vous souhaitez que le script soit publiquement lisible (
export MYSQL_PWD=$(cat /root/mysql_password)
par exemple). Il est toujours plus facile d'exporter une variable que de créer un fichier de configuration.Par exemple,
la source