Unix команды через Oracle - PullRequest
       40

Unix команды через Oracle

2 голосов
/ 22 августа 2011

Я создал PL / SQL источник Java, и предоставлены привилегии.

Процедура PL / SQL выполняется, и никаких ошибок не возникает. Внутри JavaSource есть следующая команда unix:

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

файл List.txt не создается в каталоге.

Как бы я узнал о проблеме, если нет ошибок? Может ли это быть проблемой прав, предоставляемых оракулу из unix.

Oracle на Unix Sun Solaris

Ответы [ 2 ]

3 голосов
/ 22 августа 2011

Из удаленной памяти я вполне уверен, что вам нужно предоставить некоторые привилегии пользователю, выполняющему Java, прежде чем ему будет разрешено выполнять команды Unix.

Взгляните на http://download.oracle.com/docs/cd/B28359_01/java.111/b31225/chten.htm

Я думаю, вам нужно дать ему разрешение java.io.FilePermission. Один из способов сделать это - предоставить роль JAVASYSPRIV вашему пользователю. Сейчас мне негде это проверить, но если это не так, ссылка выше должна указывать вам правильное направление.

2 голосов
/ 22 августа 2011

Я согласен со Стивеном ОДоннеллом.

Недавно я реализовал точно такую ​​же функциональность 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' 
);

Надеюсь, это поможет.Олли.

...