Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 限制用户调用包过程_Oracle_Plsql - Fatal编程技术网

Oracle 限制用户调用包过程

Oracle 限制用户调用包过程,oracle,plsql,Oracle,Plsql,在上面的示例中,p2不能从包外部调用,我知道f1、f2或p1都可以调用p2。但是,如果我想以同样的方式限制p1 这里的问题是,我也不能从包规范中删除p1。 这是一个面试问题,试图用谷歌搜索出来,但没有找到解决办法。看看这是否可行,如果可行,那么如何实现。他们可能希望您提及Oracle 12C中引入的概念。这是通过一个新的可访问的子句实现的,例如: create or replace package p is function f1 return number; function f2 r

在上面的示例中,p2不能从包外部调用,我知道f1、f2或p1都可以调用p2。但是,如果我想以同样的方式限制p1

这里的问题是,我也不能从包规范中删除p1。


这是一个面试问题,试图用谷歌搜索出来,但没有找到解决办法。看看这是否可行,如果可行,那么如何实现。

他们可能希望您提及Oracle 12C中引入的概念。这是通过一个新的可访问的子句实现的,例如:

create or replace package p is
  function f1 return number;
  function f2 return number;
  procedure p1;
end p;
/
create or replace package body p is
  function f1 return number is begin return 1; end;
  function f2 return number is begin return 2; end;
  procedure p1 is begin null; end;
  procedure p2 is begin null; end;
end p;
/
在此,只能从
mypackage
本身或从
可访问的
子句中指定的白名单程序单元
yourpackage
调用package
中的任何过程或函数


这个主题有一些很好的细节。

他们可能希望您提到Oracle 12C中引入的概念。这是通过一个新的
可访问的
子句实现的,例如:

create or replace package p is
  function f1 return number;
  function f2 return number;
  procedure p1;
end p;
/
create or replace package body p is
  function f1 return number is begin return 1; end;
  function f2 return number is begin return 2; end;
  procedure p1 is begin null; end;
  procedure p2 is begin null; end;
end p;
/
在此,只能从
mypackage
本身或从
可访问的
子句中指定的白名单程序单元
yourpackage
调用package
中的任何过程或函数


关于这个主题有一些很好的细节。

除了从规范中删除之外,我不知道这是怎么可能的。可能将p1的内部代码包装在一个条件中,以便仅为特定用户执行:类似于:
过程p1是begin if(user='ADMIN'),然后为null;如果结束;结束但是这并不能阻止p1被调用,它只是限制了p1的代码执行。也许他们在寻找Oracle 12C?@TonyAndrews我想这就是答案。不允许用户访问“执行”任何内容:)类似于
撤销p上的执行…
而不是从规范中删除,我不知道这是怎么可能的。也许将p1的内部代码包装在一个条件中,以便仅为特定用户执行:
procedure p1 is begin if(user='ADMIN'),然后为null;如果结束;结束但是这并不能阻止p1被调用,它只是限制了p1的代码执行。也许他们在寻找Oracle 12C?@TonyAndrews我想这就是答案。不允许用户访问“执行”任何内容:)类似于
revoke Execute on p…