ukinoki / Rufus

Rufus est un logiciel open source publié sous licence GPLv3 de gestion d'activité en ophtalmologie et en orthoptie, conçu pour s'adapter à toutes les formes d'exercice : individuel, groupe, et travail multisite. Rufus est bâti sur un modèle client-serveur. Le code est compilable sous MacOSX et Linux. Les exécutables sont téléchargeables sur la page Téléchargements du site.
https://www.rufusvision.org
Other
12 stars 4 forks source link

Problème de vérification des droits sur la base de données. #1

Closed q-b closed 4 years ago

q-b commented 6 years ago

Bonjour,

Version du client : https://www.rufusvision.org/uploads/9/8/0/3/98038824/rufus.dmg

Message de l'application :

Erreur sur le serveur

L'utilisateur rufus existe mais ne dispose pas de toutes les autorisations pour modifier ou créer des données sur le serveur. Choisissez un autre utilisateur ou modifiez les droits de cet utilisateur au niveau du serveur.

Vérification sur le serveur via l'utilisateur cible (ici 'rufus') :

~/Development/Rufus master 35s
❯ mysql -h 127.0.0.1 -u rufus -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 53
Server version: 10.0.34-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show grants for 'rufus'@'%';
+---------------------------------------------------------------------------------------------------------------------------------+
| Grants for rufus@%                                                                                                              |
+---------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'rufus'@'%' IDENTIFIED BY PASSWORD '<redacted>' WITH GRANT OPTION |
+---------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> show grants for 'rufus'@'%'\G;
*************************** 1. row ***************************
Grants for rufus@%: GRANT ALL PRIVILEGES ON *.* TO 'rufus'@'%' IDENTIFIED BY PASSWORD '<redacted>' WITH GRANT OPTION
1 row in set (0.00 sec)

Le test se fait visiblement ici : https://github.com/ukinoki/Rufus/blob/4e4bf319cb8e5f5629f6585f6623efe10a750db2/dlg_paramconnexion.cpp#L269

ukinoki commented 6 years ago

Je viens de découvrir ce fil. Oui, le problème vient de là. Jusqu'à MySQL 5.7, la réponse à cette requête est GRANT ALL. A partir de 8.0, cette réponse n'existe plus et on a un enum de tous les droits, donc, ça ne passe pas. Je ne comprends pas pourquoi ça ne marche pas pour MariaDB. le test se fait bien au niveau de dlg_paramconnexion.cpp au moment de la création de la base mais il se fait aussi et surtout ici, au moment de chaque connexion d'utilisateur https://github.com/ukinoki/Rufus/blob/cda4070d5703ee49e8cedbee04f83d8fef431ebb/dlg_identificationuser.cpp#L218