2 votes

Quelle est la bonne exception SQLException / spring data pour les permissions manquantes ?

Je viens de remarquer que lorsque vous essayez d'exécuter une requête qui n'a pas les autorisations requises (testé uniquement sur une base de données mysql 5.7 utilisant le pilote mysql-connector-java v8), elle est traduite en un org.springframework.jdbc.BadSqlGrammarException . Ceci est dû au fait que le pilote mysql lui-même lance une erreur java.sql.SQLSyntaxErrorException .

Par exemple : java.sql.SQLSyntaxErrorException: INSERT command denied to user 'myuser'@'127.0.0.1' for table 'mytable'

Est-ce correct et/ou intentionnel ? J'ai essayé d'examiner les diverses exceptions existantes dans les deux cas. java.sql et org.springframework.jdbc sans trouver de candidat alternatif évident.

J'ai regardé le documentation mysql pour cette erreur :

Numéro d'erreur : 1142 ; Symbole : ER_TABLEACCESS_DENIED_ERROR ; SQLSTATE : 42000

Message : La commande %s est refusée à l'utilisateur '%s'@'%s' pour la table '%s'.

D'après ce que je sais, SQLSTATE 42000 est ce que le pilote utilise pour déterminer qu'il s'agit d'une erreur de syntaxe.

0voto

Shadow Points 24929

La norme sql définit le code de retour pour les instructions sql, kmown comme suit état de sql .

Sqlstate 42000 signifie

erreur de syntaxe ou violation des règles d'accès

L'accès refusé entre dans cette catégorie, donc mysql a suivi la norme. Java a aussi largement suivi la norme, car il signale de telles erreurs comme des erreurs de syntaxe.

Malheureusement, la réponse est que vous ne pouvez pas utiliser le type d'erreur pour effectuer votre contrôle d'accès refusé, vous devez regarder le numéro d'erreur (1142 dans ce cas).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X