2017-01-26 13 views
0

私は、次のコマンドを実行しようとしています:実行システムコマンド、ストアド・プロシージャ

select os_command.exec('/bin/mkdir /home/smucha/testdir_ora3') from dual; 
/

私はSYSとしてログインしていたときにこれが正常に動作します。

私が実行しようとするユーザーとしてSEBAである私は、次のエラーを取得:

ORA-29532: java.security.AccessControlException: the Permission (java.io.FilePermission /bin/mkdir execute) has not been granted to SEBA. The PL/SQL to grant this is dbms_java.grant_permission('SEBA', 'SYS:java.io.FilePermission', '/bin/mkdir', 'execute') 
ORA-06512: at "SEBA.OS_COMMAND", line 68 
29532. 00000 - "Java call terminated by uncaught Java exception: %s" 
*Cause: A Java exception or error was signaled and could not be 
      resolved by the Java code. 
*Action: Modify Java code, if this behavior is not intended. 

を私はSYSアカウントを使用して、必要な権限を付与することを試みました。

次のコードを実行した後:

call dbms_java.grant_permission('SEBA', 
        'SYS:java.io.FilePermission', '/bin/mkdir', 'execute'); 

を私が手:

dbms_java.grant_permission 'SEBA', succeeded. 

しかし、私は、コマンドを実行しようとすると:

select os_command.exec('/bin/mkdir /home/smucha/testdir_ora3') from dual; 
/

私は同じエラーを取得するに前。

osコマンドを実行するにはどうすればよいですか?私はSYSとして接続していたときに

すべてが動作しますので、SEBAは、いくつかのアクセス許可の問題を抱えているユーザーのように見えます。

どのアクセス許可を与えるのか分かりません。

答えて

0

私はちょうど私の経験を共有したい、ストアドプロシージャは、ロールを介して提供されているddl権限を受け入れません。あなたがsebaユーザーに与えるしようとしている権限は、それはvalid.Example特権を持つロールがあり、テーブルを作成し、このロールをsebaに割り当てると、sebaはストアドプロシージャを使用してテーブルを作成できません。したがって、権限を与えてsebaに直接テーブルを作成するか、または作成中に現行ユーザーをauthidにする必要があります。この場合、sebaまたは役割を介して直接権限を与えているかどうかを確認してください。

check sebaは、ディレクトリ権限を作成していない場合は、sebaに任意のディレクトリを作成し、sebaがselect * from dba_directoriesからprivilgeを取得していることを確認します。

関連する問題