2011-08-09 34 views
2

我已经建立2程序和Java源执行的Unix Sun Solaris的命令,使用与

一个过程调用java类TestHostCommand

PROCEDURE TEST2 
    (p_command IN Varchar2) 
    AS LANGUAGE JAVA 
    NAME 'TestHostCommand.executeCommand(java.lang.String)'; 

Java源代码的权限ORACLE PL/SQL的麻烦是:

import java.io.*; 

public class TestHostCommand 
{ 

public void executeCommand(String command) 
{ 
Runtime rt = Runtime.getRuntime(); 
Process p = null; 
try 
{ 
    p = rt.exec("ls > /Orion/list/list.txt"); 
    return; 
} catch (IOException ioe) 
    { 
    System.out.println("Error executing file"); 
    } 
} 

} 

而另一个过程是授予权限但它生成不正确:

 PROCEDURE GRANT_PERMISSION 
     (grantee   IN VARCHAR2, 
     permission_type IN VARCHAR2, 
     permission_name IN VARCHAR2, 
     permission_action IN VARCHAR2) 


     IS 
     BEGIN 
     DBMS_JAVA.grant_permission ('ORION', 'java.io.FilePermission', 
            '<>', 'read ,write, execute, delete'); 

     DBMS_JAVA.grant_permission ('ORION', 'SYS:java.lang.RuntimePermission', 
               'writeFileDescriptor', ''); 

      DBMS_JAVA.grant_permission ('Orion', 'SYS:java.lang.RuntimePermission', 
               'readFileDescriptor', ''); 

      END; 

错误是无效的对象。

由于

回答

1

在第一语句中的第三个参数应该是一个文件或目录的路径,例如

 DBMS_JAVA.grant_permission ('ORION', 'java.io.FilePermission', 
           '/home/orion/*', 'read ,write, execute, delete'); 

或者你可以只授予ORION the JAVASYSPRIV role相反,因为它几乎是你在做什么呢。

无论采用哪种方式,授予ORION最大权限都会使帐户非常强大,而且需要严格控制,特别是在生产环境中。

+0

感谢您的回答。因此,我需要通过DBA设置特权,才能为我工作。谢谢 – CRL88

+0

我目前得到这个错误: 8:22:50执行失败:ORA-29532:Java调用被未捕获的Java终止异常:java.lang.SecurityException:策略表更新java.io.FilePermission,TestHostCommand – CRL88