Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

arthurvidotto

Nunca vi esse erro !

Recommended Posts

Olá... quando tento executar um proc pelo meu sistema que criei em asp.net 2.0, quando ele faz um select ele da o seguinte erro

 

Unable to retrieve stored procedure metadata. Either grant SELECT privilege to mysql.proc for this user or use "use procedure bodies=false" with your connection string.

 

 

OBS: JA COLOQUEI NA MINHA CONNECTION STRING ESSE TAL DE "use procedure bodies=false", SÓ QUE DÁÍ ELE DÁ ERRO NOS PARAMETROS DAS PROCEDURES...

 

 

Alguem já viu algum erro assim???

 

Aguardo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

é que deve estar realizando alguma operação (insert, update ou delete) e o usuário que tu tá usando não tem esses privilégios, precisa dar grant para ele

 

deve estar como usuário consulta

Compartilhar este post


Link para o post
Compartilhar em outros sites

é que deve estar realizando alguma operação (insert, update ou delete) e o usuário que tu tá usando não tem esses privilégios, precisa dar grant para ele

 

deve estar como usuário consulta

 

Então cara...esse usuario que estou usando é o unico que criei todas as tabelas todas as procs. Mas o engraçado que se eu rodo o sistema local mas com a base num servidor ele rola normal...só acontece isso quando eu jogo meu sistema no ftp ou seja num servidor de fora e com a mesma base de fora...ai da esse erro que você diz ele nao tem previlegios...mas nesse caso como eu preciso dar grant para ele??

 

Pode me ajudar ai cara...eu ja to o dia todo nesse problema...rsrs

 

Abraço e obrigado pela força

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade, esse erro "Unable to retrieve stored procedure metadata. Either grant SELECT privilege to mysql.proc for this user or use "use procedure bodies=false" with your connection string." se deve ao fato de:

 

=> quando um procedimento armazenado é chamado, os metadados deverão primeiro ser recuperados, pois, tais metadados são os dados do corpo do procedimento, por exemplo:

 

Criaremos uma tabela e uma SP:

mysql> create table t1 (id int not null auto_increment primary key, nome char(80));
Query OK, 0 rows affected (0.02 sec)

mysql> create procedure sp_1 (v_id int)
	-> begin
	-> select * from t1 where id =v_id;
	-> end;
	-> //
Query OK, 0 rows affected (0.00 sec)

O problema deste erro esta relacionado no momento que o procedimento é chamado para ser executado, pois para quem executa, parece ser somente mais uma ação, mas para o SGBD, são dois, o de:

 

1-) selecionar o procedimento no dicionário de dados;

mysql> show create procedure sp_1;
	-> //
+-----------+----------+------------------------------------------------------------------------------+
| Procedure | sql_mode | Create Procedure															 |
+-----------+----------+------------------------------------------------------------------------------+
| sp_1	  |		  | CREATE PROCEDURE `sp_1`(v_id int)
begin
select * from t1 where id =v_id;
end |
+-----------+----------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)

2-) excutar o corpo da routine;

 

mysql> select routine_definition from information_schema.routines where routine_name ='sp_1'//
+--------------------------------------------+
| routine_definition						 |
+--------------------------------------------+
| begin
select * from t1 where id =v_id;
end |
+--------------------------------------------+
1 row in set (0.00 sec)

...bom, retornar dados do catálogo de dados é mais tranquilo, a permissão está em trazer as informações para serem executadas pelo usuário, pois estas informações são recuperadas do banco de dados MySQL, o qual deve ser restrito! Talvez o problema esteja em, toda vez que se executa esse procedimento, com as permissões do usuário que o executa - SQL SECURITY - ele tenta recuperar informações do banco de dados mysql e o usuário, nesse caso chamado de INVOKER, não tem permissão para dar SELECT no banco de dados mysql. Modificar o SQL SECUTITY para DEFINER seria interessante e talvez acabaria com seu problema.

 

Veja aqui os problemas relacionados à permissão e execução de Stored Routines:

=> http://dev.mysql.com/doc/refman/5.0/en/sto...privileges.html

 

Segundo as listas on-line do MySQL Developer Zone (http://lists.mysql.com/commits/20220):

 

"Added "Use Procedure Bodies" connection string to allow calling stored procedures without querying for metadata in some cases."

 

Forte abraço!! Happy MySQL´ing!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.