Oracle 限制用户调用包过程
在上面的示例中,p2不能从包外部调用,我知道f1、f2或p1都可以调用p2。但是,如果我想以同样的方式限制p1 这里的问题是,我也不能从包规范中删除p1。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
这是一个面试问题,试图用谷歌搜索出来,但没有找到解决办法。看看这是否可行,如果可行,那么如何实现。他们可能希望您提及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…