我做了两组测试,测试目的都是要达到在test2用户的过程里有访问test1下的test1_tab表的权限,只是方法不一样 。 但是一组测试成功,一组测试失败。请教大家。
【环境】
首先我在我本机上的数据库创建了两个用户"test1" 和 "test2" , 并在 test1 下创建表 test1_tab .
【测试方式】
采取两种测试
1 。是把test1_tab的访问权限给test2.
2 。是创建一个role 把访问test1_tab权限给这个role ,然后把这个role给test2.
【第一种】
在test1下执行grant select on test1_tab to test2;
在test2下创建如下过程
create or replace procedure test(i out number)
as
begin
select count(*) into i from test1.test1_tab ;
end;
在这种情况下我运行过程没有错。
【第二种】
在test1下执行
1 create role cxtest1;
2 grant select on test1_tab to cxtest1;
3 grant cxtest1 to test2;
在test2下创建如下过程
create or replace procedure test(i out number)
as
begin
select count(*) into i from test1.test1_tab ;
end;
在这种情况下我运行过程就报表不存在的错了。 但是不在过程了查询test1_tab是可以查的到的。
请教大家,感激涕零。