Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Níveis mínimos de acesso para executar o procedimento armazenado do MySql


Isso parece ser um bug no Connector/NET, semelhante ao bug 75301 mas um pouco diferente. Ao tentar determinar metadados de parâmetro para o procedimento, ele primeiro cria um MySqlSchemaCollection chamado Procedures com todos metadados sobre o procedimento. (Este é o SELECT * FROM information_schema.routines WHERE 1=1 AND routine_schema LIKE 'Spike' AND routine_name LIKE 'TestAccess' consulta que você vê em seu log.)

O Spike conta de usuário não tem permissão para ler o ROUTINE_DEFINITION coluna, então é NULL . O Connector/NET espera que este campo não seja NULL e lança uma SqlNullValueException exceção tentando lê-lo.

Existem duas soluções alternativas:

1) O primeiro, que você descobriu, é definir CheckParameters=False em sua cadeia de conexão. Isso desabilitará a recuperação de metadados de procedimento armazenado (evitando a falha), mas pode levar a problemas mais difíceis de depurar chamando outros procedimentos armazenados se você não obtiver a ordem e o tipo de parâmetros exatamente corretos. (O Connector/NET não pode mais mapeá-los para você usando os metadados.)

2) Mude para uma biblioteca ADO.NET MySQL diferente que não tenha este bug:MySqlConnector em NuGet . É altamente compatível com Connector/NET, executa mais rápido e corrige muitos problemas conhecidos .