Mysql
 sql >> Database >  >> RDS >> Mysql

Livelli di accesso minimi per eseguire la stored procedure MySql

Questo sembra essere un bug in Connector/NET, simile a bug 75301 ma un po' diverso. Quando sta cercando di determinare i metadati dei parametri per la procedura, crea prima un MySqlSchemaCollection denominato Procedures con tutti metadati sulla procedura. (Questo è il SELECT * FROM information_schema.routines WHERE 1=1 AND routine_schema LIKE 'Spike' AND routine_name LIKE 'TestAccess' query che vedi nel tuo registro.)

Il Spike l'account utente non dispone dell'autorizzazione per leggere la ROUTINE_DEFINITION colonna, quindi è NULL . Connector/NET prevede che questo campo non sia NULL e genera una SqlNullValueException eccezione cercando di leggerlo.

Esistono due soluzioni alternative:

1) Il primo, che hai scoperto, è impostare CheckParameters=False nella stringa di connessione. Ciò disabiliterà il recupero dei metadati della procedura memorizzata (evitando l'arresto anomalo), ma potrebbe causare problemi di debug più difficili che chiamano altre procedure memorizzate se non si ottengono l'ordine e il tipo di parametri esattamente corretti. (Connector/NET non può più mapparli per te utilizzando i metadati.)

2) Passa a una libreria MySQL ADO.NET diversa che non presenta questo bug:MySqlConnector su NuGet . È altamente compatibile con Connector/NET, funziona più velocemente e corregge molti problemi noti .