Mysql
 sql >> Base de données >  >> RDS >> Mysql

Niveaux d'accès minimaux pour exécuter la procédure stockée MySql

Cela semble être un bogue dans Connector/NET, similaire au bug 75301 mais un peu différent. Lorsqu'il essaie de déterminer les métadonnées des paramètres de la procédure, il crée d'abord une MySqlSchemaCollection nommées Procedures avec tous métadonnées sur la procédure. (Il s'agit de SELECT * FROM information_schema.routines WHERE 1=1 AND routine_schema LIKE 'Spike' AND routine_name LIKE 'TestAccess' requête que vous voyez dans votre journal.)

Le Spike le compte utilisateur n'est pas autorisé à lire le ROUTINE_DEFINITION colonne, donc c'est NULL . Connector/NET s'attend à ce que ce champ soit non NULL et lève une SqlNullValueException exception essayant de le lire.

Il existe deux solutions :

1) Le premier, que vous avez découvert, consiste à définir CheckParameters=False dans votre chaîne de connexion. Cela désactivera la récupération des métadonnées de la procédure stockée (évitant le plantage), mais peut entraîner des problèmes plus difficiles à déboguer en appelant d'autres procédures stockées si vous n'obtenez pas exactement l'ordre et le type de paramètres. (Connector/NET ne peut plus les mapper pour vous en utilisant les métadonnées.)

2) Basculez vers une autre bibliothèque MySQL ADO.NET qui n'a pas ce bogue :MySqlConnector sur NuGet . Il est hautement compatible avec Connector/NET, fonctionne plus rapidement et corrige de nombreux problèmes connus .