次のことを行うJava関数をOracleデータベースから呼び出そうとしています。
Process p = Runtime.getRuntime().exec("...");
実行しようとすると、次のエラーが発生します。
ORA-29532: Java call terminated by uncaught Java exception:
Java.security.AccessControlException: the Permission (Java.io.FilePermission
<<ALL FILES>> execute) has not been granted to SCOTT. The PL/SQL to grant this
is dbms_Java.grant_permission( 'SCOTT', 'SYS:Java.io.FilePermission', '<<ALL
FILES>>', 'execute' )
この権限を付与するにはどうすればよいですか?
更新:(sysdbaとして)SQL * Plusで次を実行すると、
dbms_Java.grant_permission( 'SCOTT',
'SYS:Java.io.FilePermission',
'<<ALL FILES>>',
'execute' );
エラーが発生します:
SP2-0734: unknown command beginning "/dbms_Java..." - rest of line ignored.
SQL> SP2-0734: unknown command beginning "'SYS:Java...." - rest of line ignored.
SQL> SP2-0734: unknown command beginning "'<<ALL FIL..." - rest of line ignored.
SP2-0044: For a list of known commands enter HELP
and to leave enter EXIT.
エラーメッセージは実際に正確な構文を提供します
dbms_Java.grant_permission( 'SCOTT',
'SYS:Java.io.FilePermission',
'<<ALL FILES>>',
'execute' )
エラーメッセージのテキストを変更してディレクトリをエラーから削除したかどうかは、私には明らかではありません。通常、エラーは、アクセスを許可する必要がある特定のディレクトリを示します。
Javaストアドプロシージャに任意のシェルスクリプトの実行を許可することを意図している場合(これは非常に危険です-コマンドはOracleオペレーティングシステムユーザーとして実行されるため、バイパスすることができます)データベース内のセキュリティ対策)、あなたは次のようなことができるはずです
begin
dbms_Java.grant_permission
('SCOTT',
'Java.io.FilePermission',
'<<ALL FILES>>',
'execute');
dbms_Java.grant_permission
('SCOTT',
'Java.lang.RuntimePermission',
'*',
'writeFileDescriptor' );
end;