【 使用环境 】测试环境
【 OB or 其他组件 】OB社区版
【 使用版本 】5.7.25-OceanBase_CE-v4.3.5.2
【问题描述】使用非root用户创建存储过程,执行后报错:(SQL 错误 [1142] [42000]: SELECT command denied to user 'yvt'@'%' for table 'a')
存储过程内容如下:
CREATE DEFINER = `yvt`@`%` PROCEDURE `test_p`.`TEST1`()
MODIFIES SQL DATA
BEGIN
insert into test_p.b select * from test_p.a;
end
【复现路径】
创建测试库(root用户下执行):
create database test_p CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
GRANT all PRIVILEGES ON test_p.* TO 'yvt'@'%';
存储过程涉及的两张表都是简单建表语句(yvt用户下执行):
create table test_p.a(id int);
create table test_p.b(id int);
创建和调用存储过程语句(yvt用户下执行):
CREATE PROCEDURE TEST_P.TEST1()
BEGIN
insert into test_p.b select * from test_p.a;
end
call TEST_P.TEST1();
执行后报错:SQL 错误 [1142] [42000]: SELECT command denied to user 'yvt'@'%' for table 'a'
给yvt用户赋权grant CREATE,DROP,INSERT ON *.* to 'yvt';
仍然无法调用成功
类似的,创建以下存储过程并调用,可正常运行:
CREATE PROCEDURE TEST_P.TEST2()
BEGIN
insert into test_p.testtable select * from ybt.YBT_WJFLZT;
end
ybt库是同租户下另一库,同样是root下创建后赋权GRANT all PRIVILEGES ON ybt.* TO 'yvt'@'%';
反而可以执行成功,不知道这是什么原因?
不知道是否有什么解决办法,或者说存储过程只能在root用户下调用?