【问题标题】:Unix commands through Oracle通过 Oracle 的 Unix 命令
【发布时间】:2011-11-01 00:27:33
【问题描述】:

我已经创建了一个 PL/SQL 一个 Java 源,并且已授予权限。

PL/SQL 过程正在执行,没有出现错误。 在 JavaSource 中有以下 unix 命令:

ls -al > /orion/list/list.txt

目录中没有创建文件 List.txt。

如果没有出现错误,我怎么知道问题所在? 这可能是 unix 赋予 oracle 权限的问题吗?

Oracle 在 unix sun solaris 上

【问题讨论】:

标签: java oracle unix privileges rights


【解决方案1】:

我同意斯蒂芬·奥唐奈的观点。

我最近实现了完全相同的 Java 功能(创建包含目录列表的文件)。

我需要授予以下权限:

-- this grants read privilege on STDIN
EXEC dbms_java.grant_permission(
   grantee => '<username>', 
   permission_type => 'SYS:java.lang.RuntimePermission', 
   permission_name => 'readFileDescriptor', 
   permission_action => null
);

-- this grants write permission on STDOUT
EXEC dbms_java.grant_permission(
   grantee => '<username>', 
   permission_type => 'SYS:java.lang.RuntimePermission', 
   permission_name => 'writeFileDescriptor', 
   permission_action => null
);

-- this grants execute privilege for the 'ls' command
EXEC dbms_java.grant_permission(
   grantee => '<username>', 
   permission_type => 'SYS:java.io.FilePermission', 
   permission_name => '/bin/ls', 
   permission_action => 'execute'
);

-- this grants read, write, delete and execute on all 
-- of the referenced directories (subdirectories of <directory>)
EXEC dbms_java.grant_permission(
   grantee => '<username>', 
   permission_type => 'SYS:java.io.FilePermission', 
   permission_name => '<directory>/-', 
   permission_action => 'read,write,delete,execute'
);

-- this grants execute on sh
EXEC dbms_java.grant_permission(
   grantee => '<username>', 
   permission_type => 'SYS:java.io.FilePermission', 
   permission_name => '/bin/sh', 
   permission_action => 'read,execute' 
);

希望这会有所帮助。 奥利。

【讨论】:

  • 是的,该代码看起来很熟悉 - 可能最好改为运行它或依赖我建议的角色,以防角色无法提供所需的一切。
  • 我设置了以下权限,但问题仍然存在。这可能是由于 Oracle 用户与 Unix 用户不同吗?结尾;开始 DBMS_JAVA.grant_permission ('ORION', 'SYS:java.lang.RuntimePermission','writeFileDescriptor', '');结尾;开始 DBMS_JAVA.grant_permission ('ORION', 'SYS:java.lang.RuntimePermission','readFileDescriptor', '');结束;
  • “这可能是因为 Oracle 用户与 Unix 用户不同”。不,数据库中的用户与访问操作系统命令的数据库是分开的。 Oracle 是否具有操作系统目录的访问权限?
  • 所以在这种情况下那将是猎户座,因为我还是新手。感谢您的耐心等待
  • Oracle 代表 ORION 用户访问操作系统目录。在我使用的情况下,Oracle 必须访问的 Unix 目录都归 OS Oracle 用户所有,因此不存在 OS 目录权限问题。我还确保目录中的文件归 OS Oracle 用户所有,或者至少 Oracle 用户有权操作它们。
【解决方案2】:

从遥远的记忆中,我相当确定您需要授予执行 Java 的用户一些权限,然后才能允许它执行 unix 命令。

看看http://download.oracle.com/docs/cd/B28359_01/java.111/b31225/chten.htm

我认为你需要给它 java.io.FilePermission 权限。一种方法是将角色 JAVASYSPRIV 授予您的用户。我目前无处进行测试,但如果不正确,上面的链接应该为您指明正确的方向。

【讨论】:

  • 权限已由 DBA 授予问题是我的 Sql Navigator 上没有记录错误,但目录中没有创建文件 list.txt
  • 请您的 DBA 查看警报日志以查看 Oracle 是否报告了任何问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-17
相关资源
最近更新 更多