par , 25/01/2017 à 08h51 (1572 Affichages)
Le danger
Rien de plus dangereux que de laisser traîner un login et son mot de passe (avec, souvent, des droits excessifs) dans un shell ou un batch, pour l'exécution des tâches automatiques sur les bases de données.
Voici quelques méthodes pour éviter de laisser grande ouverte cette backdoor si prisée des hackers en herbe.
Dans la mesure du possible, veillez donc à n'attribuer aux logins de maintenance que les droits stricts et nécessaires à leurs tâches.
Oracle
En étant connecté sur le serveur, avec le login Oracle, on peut créer des scripts en utilisant l'option sysdba.
C'est peu glorieux (car c'est un login éminemment puissant), mais cela a le mérite de ne pas laisser traîner un mot de passe dans les jobs.
Attention dans le shell à bien gérer les \
1 2 3 4
| sqlplus / as sysdba << EOF
select instance_name from v\$instance ;
exit
EOF |
MS-SQL Server
On peut clairement dédier l’authentification à Windows et accéder à la base via l'option -E de sqlcmd
sqlcmd -E -i FichierDeCommande.sql -o FichierDeSortie.out
MySQL
Avant la version 5.6, des méthodes plus ou moins bancales existaient (utilisation de la variable MYSQL_PASS, insertion du mot de passe en clair dans un fichier .my.cnf, etc.)
Dès la version 5.6.10, il existe une méthode plus propre
mysql_config_editor set --login-path=local --host=localhost --user=MonUtilisateurPourBatch --password
Cet utilitaire crée alors un fichier .mylogin.cnf conteant les mots de passe cryptés.
La connexion se fait via
mysql --login-path=local --host=localhost --port=3304 -e 'show databases ;'
NB : attention au bogue 74482 qui n'autorise pas l'utilisation de # dans le mot de passe.
Postgresql
Il suffitd'ajouter au fichier pg_hba.conf une entrée pour accès local sur la base postgres, voire d'y donner accès depuis une adresse bien spécifique, avec cette fois-ci un mot de passe
1 2 3 4
| --- pg_hba.conf ---
local postgres sqlmaintenance trust
host postgres sqlmaintenance 192.168.3.17/32 md5
--- fin pg_hba.conf --- |
puis, au niveau de l'instance, d'attribuer les droits stricts et nécessaires à cet utilisateur
create user sqlmaintenance WITH PASSWORD 'sUZdsfw8s0F4' ;
et d'y accéder via psql sur le serveur, sans mot de passe
1 2 3 4 5 6 7 8
| psql postgres sqlmaintenance
Type "help" for help.
postgres=> select current_user ;
current_user
----------------
sqlmaintenance
(1 row) |
ou depuis la machine 192.168.3.17 avec mot de passe