使用 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 命令的权限问题的主要内容,如果未能解决你的问题,请参考以下文章
ORACLE PL/SQL:以最大执行时间调用外部 Oracle PL/SQL 过程