« MariaDB - Gestion utilisateurs » : différence entre les versions

De Wiki doc

Aucun résumé des modifications
Aucun résumé des modifications
 
(4 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
[[Category:base_de_données]]
[[Category:base_de_données]]
{{chantier}}
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.
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.


Ligne 11 : Ligne 14 :
=Création d'un utilisateur=
=Création d'un utilisateur=
Création d'un compte administrateur pour une base de donnée spécifique
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 'Mod_de_passe';
  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).
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).


Ligne 18 : Ligne 21 :


=Lister les utilisateurs=
=Lister les utilisateurs=
<span style="color:red;">À compléter.</span>
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 [[Script bash|Bash]] de tout les utilisateurs avec leurs droits (trouvé [https://blog.seboss666.info/astuces-diverses-recap/ 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=
=Modification d'un mot de passe=
Ligne 25 : Ligne 41 :


=Supprimer un utilisateur=
=Supprimer un utilisateur=
  DELETE FROM mysql.user WHERE user='username' and host='hostname';
Révocation des privilèges
REVOKE ALL PRIVILEGES ON NOM_DE_BASE.* FROM 'utilisateur'@'%';
 
''[https://stackoverflow.com/questions/17799806/remove-privileges-from-mysql-database#17852996 Source].''
 
Suppression de l'utilisateur
  DELETE FROM mysql.user WHERE user='utilisateur' and host='nom_dhote';
  FLUSH PRIVILEGES;
  FLUSH PRIVILEGES;
ou :
DROP USER account_name;


=Source=
=Source=
http://dev.mysql.com/doc/refman/5.0/fr/drop-user.html
* http://dev.mysql.com/doc/refman/5.0/fr/drop-user.html
* https://www.mysqltutorial.org/mysql-drop-user/

Dernière version du 23 janvier 2022 à 20:06

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