MySQL报错“noAccessToProcedureBodies=true”解决方法
MySQL执行存储过程的时候,报错:
User does not have access to metadata required to determine stored procedure parameter types. If rights can not be granted, configure connection with "noAccessToProcedureBodies=true" to have driver generate parameters that represent INOUT strings irregardless of actual parameter types.
解决方法如下:
1、为连接MySQL的这个数据库用户分配“获取存储过程元数据(MetaData)”的权限,即有mysql.proc表的select权限,如下:
GRANT SELECT ON mysql.proc TO TO 'myuser'@'myhost';
推荐用这个方法;
2、给数据库连接设置一个noAccessToProcedureBodies属性,属性值为true,示例如下:
jdbc:mysql://ipaddress:3306/test?noAccessToProcedureBodies=true
设置noAccessToProcedureBodies=true以后的影响:
调用存储过程时,将没有类型检查,设为字符串类型,并且所有的参数设为in类型,但是在调用registerOutParameter时,不抛出异常。
存储过程的查询结果无法使用getXXX(String parameterName)的形式获取,只能通过getXXX(int parameterIndex)的方式获取。
参考:
http://bugs.mysql.com/bug.php?id=20235
http://bugs.mysql.com/bug.php?id=24065
Tag标签:「权限 mysql noAccessToProcedureBodies MetaData 元数据」更新时间:「2021-11-03 11:08:50」阅读次数:「861」