sql >> Databasteknik >  >> RDS >> Mysql

Minsta åtkomstnivåer för att köra MySql lagrad procedur

Det här verkar vara en bugg i Connector/NET, liknande bug 75301 men lite annorlunda. När den försöker fastställa parametermetadata för proceduren, skapar den först en MySqlSchemaCollection heter Procedures med alla metadata om proceduren. (Detta är SELECT * FROM information_schema.routines WHERE 1=1 AND routine_schema LIKE 'Spike' AND routine_name LIKE 'TestAccess' fråga som du ser i din logg.)

Spike användarkontot har inte behörighet att läsa ROUTINE_DEFINITION kolumn, så det är NULL . Connector/NET förväntar sig att detta fält inte är NULL och skickar en SqlNullValueException undantag försöker läsa den.

Det finns två lösningar:

1) Den första, som du har upptäckt, är att ställa in CheckParameters=False i din anslutningssträng. Detta kommer att inaktivera hämtning av lagrad procedurmetadata (undviker kraschen), men kan leda till svårare att felsöka problem med att anropa andra lagrade procedurer om du inte får exakt rätt ordning och typ av parametrar. (Connector/NET kan inte längre mappa dem åt dig med hjälp av metadata.)

2) Byt till ett annat ADO.NET MySQL-bibliotek som inte har denna bugg:MySqlConnectorNuGet . Den är mycket kompatibel med Connector/NET, presterar snabbare och fixar många kända problem .



  1. Skapa en topplistor, hur skulle jag gå tillväga för att visa rang/position?

  2. Mysql Välj rader där två kolumner inte har samma värde

  3. JOIN-frågor kontra flera frågor

  4. MySQL-tidszon ändras?