MariaDB - Gestion utilisateurs

De Wiki doc

EN CHANTIER

Article en cours d'écriture et/ou de test. Certains éléments peuvent être incomplets et mener à un résultat non fonctionnel.
Merci de ne pas rager.

On voit trop souvent de documentations avec des connexions aux bases de données via l'utilisateur root par ce que c'est plus simple comme ça. Le hic, c'est que lors du piratage du dit compte root, le malotru a les pleins pouvoir sur toute les bases de données, il peut donc foutre un bordel monstre et ça pue.

Pour éviter ça, il est préférable de créer des utilisateurs limités aux droits strictement nécessaires à l'application utilisant une base de donnée. Dans la pratique ce n'est pas toujours simple de déterminer les droits nécessaires à un applicatif pour fonctionner (lorsque ce n'est pas nous le développeur notamment). Dans tout les cas, un utilisateur SQL n'aura jamais besoin d'avoir plus que les plein pouvoirs sur sa propre base de donnée (et pas celle des autres). Il n'est donc pas inutile de rétreindre les droits à un utilisateur par base plutôt qu'a un super admin qui fait tout.

Toute les opérations touchants aux droits s'effectuent en root SQL. Les comptes sont stockés dans la tables "user" de la base "mysql". Des requêtes standards SQL suffisent à gérer les comptes.

Liste des droits possibles

À compléter.

Création d'un utilisateur

Création d'un compte administrateur pour une base de donnée spécifique

GRANT all privileges on Nom_base.* to 'Nom_utilisateur'@'localhost' identified by 'Mot_de_passe';

On peut utiliser 192.168.%.%, 192.168.1.% ou % pour autorser des réseaux à la place de localhost (nécessite un "bind-address = 192.168.0.0" adapté dans le /etc/mysql/my.cnf ou alors commenter l'option).

Ne pas oublier de créer cette base

CREATE DATABASE Nom_base;

Lister les utilisateurs

Listage simple:

select concat as User from mysql.user;

ou :

select user, host from mysql.user;

Listage avec affichage de l'hôte sur lequel l'utilisateur a des droits:

select concat('\,User,'\'@\,Host,'\) as User from mysql.user;

Listage avec les droits:

show grants for yohan@localhost;

Petit script pour un affichage de manière récursive depuis Bash de tout les utilisateurs avec leurs droits (trouvé ici dans la section Lister tous les utilisateurs MySQL et leurs droits):

mariadb --silent --skip-column-names --execute "select concat('\,User,'\'@\,Host,'\) as User from mysql.user" | sort | while read u; do echo -e "\n-- $u"; mariadb --silent --skip-column-names --execute "show grants for $u" | sed 's/$/;/'; done

Modification d'un mot de passe

SET PASSWORD FOR 'Login_utilisateur'@'%' = PASSWORD('Nouveau_mdp');

il faut que les valeurs entrées soient égales aux privilèges d'accès de l'utilisateur.

Supprimer un utilisateur

Révocation des privilèges

REVOKE ALL PRIVILEGES ON NOM_DE_BASE.* FROM 'utilisateur'@'%';

Source.

Suppression de l'utilisateur

DELETE FROM mysql.user WHERE user='utilisateur' and host='nom_dhote';
FLUSH PRIVILEGES;

ou :

DROP USER account_name;

Source