Description:
MySQL Version: Ver 14.14 Distrib 5.1.49, for debian-linux-gnu (x86_64) using readline 6.1
I have a mysql user with only execute procedures permissions.
My MyBatis connection config:
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydatabase?noAccessToProcedureBodies=true"/>
<property name="username" value="testuser"/>
<property name="password" value="test"/>
</dataSource>
After run, I get next exception:
'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.'
But when I change mysql-connector-java version from 5.1.15 to 5.1.10. It's work fine. I also checked connector's 5.1.18 version. I get the same error.
How to repeat:
1.) Run for root user:
CREATE DATABASE mydatabase;
USE mydatabase;
CREATE TABLE TYPES (id INT, name VARCHAR(250));
insert into database_type (id, name) values (1, 'testType1');
insert into database_type (id, name) values (2, 'testType2');
insert into database_type (id, name) values (3, 'testType3');
insert into database_type (id, name) values (4, 'testType4');
create procedure QueryTypes()
SELECT id, name FROM types;
CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test';
GRANT EXECUTE ON mydatabase.* TO 'testuser'@'localhost' identified by 'test';
2). Configure MyBatis:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
.....
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydatabase?noAccessToProcedureBodies=true"/>
<property name="username" value="testuser"/>
<property name="password" value="test"/>
</dataSource>
</environment>
</environments>
.....
</configuration>
3). Call the stored procedure from your application
Description: MySQL Version: Ver 14.14 Distrib 5.1.49, for debian-linux-gnu (x86_64) using readline 6.1 I have a mysql user with only execute procedures permissions. My MyBatis connection config: <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mydatabase?noAccessToProcedureBodies=true"/> <property name="username" value="testuser"/> <property name="password" value="test"/> </dataSource> After run, I get next exception: '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.' But when I change mysql-connector-java version from 5.1.15 to 5.1.10. It's work fine. I also checked connector's 5.1.18 version. I get the same error. How to repeat: 1.) Run for root user: CREATE DATABASE mydatabase; USE mydatabase; CREATE TABLE TYPES (id INT, name VARCHAR(250)); insert into database_type (id, name) values (1, 'testType1'); insert into database_type (id, name) values (2, 'testType2'); insert into database_type (id, name) values (3, 'testType3'); insert into database_type (id, name) values (4, 'testType4'); create procedure QueryTypes() SELECT id, name FROM types; CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test'; GRANT EXECUTE ON mydatabase.* TO 'testuser'@'localhost' identified by 'test'; 2). Configure MyBatis: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> ..... <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mydatabase?noAccessToProcedureBodies=true"/> <property name="username" value="testuser"/> <property name="password" value="test"/> </dataSource> </environment> </environments> ..... </configuration> 3). Call the stored procedure from your application