2017-06-19 4 views
1
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; 
/

上記の例では、パッケージ外からp2を呼び出すことはできません.f1、f2、またはp1はp2を呼び出すことができます。しかし、もしp1を同じように制限したいのであれば。ユーザーにパッケージプロシージャを呼び出すように制限する

ここでは、パッケージ指定からp1を削除できません。

これはインタビューの質問であり、Googleに試してみましたが、解決策が見つかりませんでした。これが可能かどうかを調べ、そうであればどのようにしてください。

+0

仕様から削除する以外は、どうすれば可能かわかりません。 – OldProgrammer

+1

おそらく、特定のユーザのためだけに実行するために、p1の内部コードを条件付きでラップすることができます: 'procedure p1 is begin(USER = 'ADMIN')then null;終了する。これはp1が呼び出されるのを妨げるものではなく、コードの実行を制限するだけです。 –

+5

彼らはOracle 12C [ホワイトリスト](http://tkyte.blogspot.co.uk/2013/07/12c-whitelists.html)を探していたのでしょうか? –

答えて

0

これは、Oracle 12Cで導入されたwhitelistsのコンセプトについて言及したいと思っているかもしれません。これは、例えば、新しいACCESSIBLE BY句によって実現される:

パッケージ mypackageの任意の手順または関数のみ mypackage自体から又は ACCESSIBLE BY句で指定されたホワイトリストに登録プログラム単位 yourpackageから呼び出すことができる。ここで
CREATE OR REPLACE PACKAGE mypackage 
    ACCESSIBLE BY (yourpackage) 
IS 
    PROCEDURE p1; 
END; 

このトピックの詳細は、in this Oracle-Base articleです。

関連する問題