Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 dba_java_policy (dbms_java.grant_permission)  [new]
drno
Member

Откуда:
Сообщений: 228
Доброго дня!

Хочу сделать следующее: чтобы Oracle формировал какой-нибудь файл и копировал/переносил его на другой сервер.

Для этого, что было сделано:

в Oracle
-- создан класс:

create or replace and compile java source named Command_Runner as
import java.io.PrintWriter;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.*; 
// запускает все что угодно - Commnad_line
public class Command_Runner
{
    public static void Start_Command(java.lang.String Commnad_line){
        try {
            Runtime.getRuntime().exec(Commnad_line);
            
        } catch (IOException e) {
            // TODO
        }
    }
}

-- для запуска класса процедура

CREATE OR REPLACE PROCEDURE COMMAND_RUNNER_JAVA_TO (Commnad_line IN VARCHAR2)
AS LANGUAGE JAVA
NAME 'Command_Runner.Start_Command(java.lang.String)';

-- назначены права для пользователя USER1

begin
  dbms_java.grant_permission('USER1', 'SYS:java.io.FilePermission', 'c:\Temp', 'read,write,execute');
  dbms_java.grant_permission('USER1', 'SYS:java.io.FilePermission', '\\192.168.1.10\c$\Temp', 'read,write,execute');
end;

Запускаю процедуру из-под USER1

begin
  COMMAND_RUNNER_JAVA_TO('cmd /c dir > \\192.168.1.10\c$\Temp\dir3.txt');
end;

Проверяю - в \\192.168.1.10\c$\Temp\ ничего нет

Если
begin
  COMMAND_RUNNER_JAVA_TO('cmd /c dir > с:Temp\dir3.txt');
end;
то файл есть.

В чем может быть проблема?
Может все-таки неправильно назначены права пользователю USER1 - dbms_java.grant_permission?
23 сен 11, 11:11    [11324219]     Ответить | Цитировать Сообщить модератору
 Re: dba_java_policy (dbms_java.grant_permission)  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
И служба OracleService<SID> запущена под учеткой Local System Account (которая не имеет доступа к сетевым ресурсам) ?
23 сен 11, 11:16    [11324255]     Ответить | Цитировать Сообщить модератору
 Re: dba_java_policy (dbms_java.grant_permission)  [new]
drno
Member

Откуда:
Сообщений: 228
Вячеслав Любомудров,

Да, служба запущена под LocalSystem.
23 сен 11, 11:18    [11324268]     Ответить | Цитировать Сообщить модератору
 Re: dba_java_policy (dbms_java.grant_permission)  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Теперь подумай, какой процесс, под какой учеткой и, соответственно, с какими правами будет выполнять твой java-код
23 сен 11, 11:24    [11324341]     Ответить | Цитировать Сообщить модератору
 Re: dba_java_policy (dbms_java.grant_permission)  [new]
drno
Member

Откуда:
Сообщений: 228
Вячеслав Любомудров,

Подумал. Служба OracleService<SID> теперь запускается не под Local System Account.

Проблема решена.

Всем спасибо!
23 сен 11, 16:15    [11327723]     Ответить | Цитировать Сообщить модератору
 Re: dba_java_policy (dbms_java.grant_permission)  [new]
drno
Member

Откуда:
Сообщений: 228
Добрый день!

Короче говоря работал Java класс нормально в прошлом году, месяцев 4 я ей не пользовался.
Теперь кинулся, а он не работает.

begin
  COMMAND_RUNNER_JAVA_TO('cmd /c dir > с:\Temp\dir3.txt');
end; 



Уже несколько раз службу OracleService<SID> передернул, все равно ничего.


Есть ли где-нибудь log, поглядеть или что могло случиться?
11 мар 12, 12:05    [12224516]     Ответить | Цитировать Сообщить модератору
 Re: dba_java_policy (dbms_java.grant_permission)  [new]
drno
Member

Откуда:
Сообщений: 228
create or replace and compile java source named java_command_shell as
import java.io.*;
// Java класс исполняющий любые команды ОС через Shell Java
public class HostCommand {

  public static String exec(String command) throws InterruptedException {
    String s;
    String message = "";
    try {
      Process p = Runtime.getRuntime().exec(command, null);
      p.waitFor();
      BufferedReader stdInput = new BufferedReader(new InputStreamReader(
          p.getInputStream()));
      BufferedReader stdError = new BufferedReader(new InputStreamReader(
          p.getErrorStream()));
      while ((s = stdInput.readLine()) != null) {
        message = message + s;
      }
      while ((s = stdError.readLine()) != null) {
        message = message + s;
      }
    } catch (IOException e) {
      StringWriter sw = new StringWriter();
      PrintWriter pw = new PrintWriter(sw);
      e.printStackTrace(pw);
    }
    return message;
  }

}



CREATE OR REPLACE FUNCTION JAVA_COMMAND_SHELL (p_command VARCHAR2)
    RETURN VARCHAR2
  AS LANGUAGE JAVA
  -- функция исполняющая любые команды ОС через Shell Java
  NAME 'HostCommand.exec (java.lang.String) return String';



исполнение

begin
dbms_output.put_line(JAVA_COMMAND_SHELL('cmd /c dir >c:\Temp\dir2223.txt'));
end;

таким образом все заработало.
11 мар 12, 17:15    [12226775]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить