这里的问题是:
user1没有表tab上的INSERT权限,但是,user1通过向视图v_tab中插入数据成功,导致user1将数据插入到了表tab中。
视图是个虚拟表 视图是基于基表创建的 实际的dml操作其实就是对基表操作的 在其他的数据库中也应该是一样的
如果视图引用了5个基表,其中,有4个基表user1有权限插入数据,有1个基表user1没有权限插入,这时,user1可以通过视图向那个没有插入权限的表中来插入数据了,这样就越权了
mysql中,在创建视图时,可以指定在执行期间是使用视图的创建者的权限还是调用者的权限,这样就防止了越权。
我想了解下我们ob这边在实现时,没有验证用户对基表的操作权限的原因是什么?
应该是和mysql保持一致 如果对基表没有插入权限 这样的操作 就是越权了 你最新的版本测试吧 应该是已知问题 我看你用的是431 你用OLAPob435或者OLTPob425 这两个版本都是LTS版本
4351也有这个问题
好的 我们内部也测试一下 看看
楼上我回答的有问题 不还意思 重新和内部的同学确认了 和mysql保持一致 我们也测试了 mysql也是这样 兼容mysql
mysql中,在创建视图时,可以使用SQL SECURITY指定在执行期间是使用视图的创建者的权限还是调用者的权限:
root:
create table tab2(c1 int, c2 int);
create SQL SECURITY INVOKER view v_tab2 as select * from tab2; -- 指定INVOKER,执行期间使用调用者的权限
create user user1;
grant insert on test.v_tab2 to user1;
user1:
mysql> insert into test.v_tab2 values(1,1); -- 失败
ERROR 1356 (HY000): View 'test.v_tab2' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
root:
grant insert on test.tab2 to user1;
user1:
mysql> insert into test.v_tab2 values(1,1); -- 成功
Query OK, 1 row affected (0.00 sec)
目前ob支持create SQL SECURITY INVOKER view这个语法 但是没有实际的功能
好的,谢谢您
通过create view v_tab3 as select * from tab3;这种方式创建视图,在向视图插入数据时,
mysql需要用户有视图上的INSERT权限,同时,还需要视图的创建者要有基表上的INSERT权限,
ob只需要用户有视图上的INSERT权限:
root:
create table tab3(c1 int, c2 int);
create user user1;
create user user2;
grant create view on test.* to user2;
grant select on test.tab3 to user2;
user2:
create view v_tab3 as select * from tab3;
root:
grant insert on test.v_tab3 to user1;
user1:
insert into test.v_tab3 values(1,1); -- mysql失败,ob成功
mysql报错:ERROR 1356 (HY000): View 'test.v_tab3' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
以下在mysql中执行:
root:
grant insert on test.tab3 to user2; -- 给视图的创建者授权基表tab3上的INSERT权限
user1:
insert into test.v_tab3 values(1,1); -- 成功
grant insert on test.v_tab to user1;user1对test.v_tab有insert权限,那不就自然对构成v_tab这个视图的表有insert权限了,如果没有对应的权限那这个权限赋予的意义不就没有了
mysql是哪个版本
8.0.42
找其他的同学问一下 看看是否符合预期 后面有结果了 会同步给你
好的,谢谢您
符合ob预期 目前和mysql没有对齐 后期暂时没有计划支持
这样不就出现越权了吗?ob预期是什么呢?
目前是预期内 和mysql不一致
好的,谢谢您