使用 ORACLE PL/SQL 执行 Unix Sun Solaris 命令的权限问题

Posted

技术标签:

【中文标题】使用 ORACLE PL/SQL 执行 Unix Sun Solaris 命令的权限问题【英文标题】:Executing Unix Sun Solaris Commands Using ORACLE PL/SQL trouble with permissions 【发布时间】:2011-08-09 12:35:52 【问题描述】:

我已经创建了 2 个过程和一个 java 源代码

一个过程正在调用 java 类 TestHostCommand

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

Java源码是:

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 授予最大权限都会使该帐户非常强大,并且您需要对其进行严格控制,尤其是在生产环境中。

【讨论】:

感谢您的回答。所以我需要通过 DBA 设置权限才能为我工作。谢谢 我目前收到此错误:8:22:50 执行失败:ORA-29532:Java 调用因未捕获的 Java 异常而终止:java.lang.SecurityException:策略表更新 java.io.FilePermission,测试主机命令

以上是关于使用 ORACLE PL/SQL 执行 Unix Sun Solaris 命令的权限问题的主要内容,如果未能解决你的问题,请参考以下文章

Oracle11G_PL/SQL

ORACLE PL/SQL:以最大执行时间调用外部 Oracle PL/SQL 过程

使用 OCCI oracle 在 C++ 中执行 PL/SQL 脚本

oracle SQL语句中怎么样调用存储过程

PL_sql如何执行oracle存储过程

如何使用参数从 Oracle PL/SQL 执行 Java jar 文件?