使用调用者权限实现Schema导向操作
作者:网络转载 发布时间:[ 2014/11/27 15:30:32 ] 推荐标签:数据库 项目开发
在用户a中进行实验,结果:
SQL> exec proc('mmm');
PL/SQL procedure successfully completed
SQL> select * from a;
COL
----------------------------------------
JJJ
mmm
iii
转换到用户b中,进行测试:
SQL> conn b/b@sicsdb
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
Connected as b
SQL> exec proc('NNN');
PL/SQL procedure successfully completed
SQL> select * from a;
COL
----------------------------------------
NNN
SQL> select * from a.a
2 ;
COL
--------------------
JJJ
mmm
iii
测试成功!在调用者权限模式下,可以实现调用Schema下数据表优先的效果。如果此时Schema B中没有数据表a,效果如何?
SQL> drop table a;
Table dropped
SQL> exec proc('mt');
begin proc('mt'); end;
ORA-00942: 表或视图不存在
ORA-06512: 在 "A.PROC", line 3
ORA-06512: 在 line 1
如果b用户可以有a用户下的数据表a权限呢?问题依然。
SQL> conn a/a@sicsdb
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
Connected as a
SQL> grant all on a to b;
Grant succeeded
SQL> conn b/b@sicsdb
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
Connected as b
SQL> exec proc('mt');
begin proc('mt'); end;
ORA-00942: 表或视图不存在
ORA-06512: 在 "A.PROC", line 3
ORA-06512: 在 line 1
4、结论
所有者权限和调用者权限,是Oracle存储过程中两个重要的概念对象,一些麻烦场景下应用往往有不错的效果。

sales@spasvo.com