Невозможно получить доступ к jarfile при использовании xp_cmdshell

У меня есть файл jar, который я хочу вызвать/запустить из хранимой процедуры SQL. Для этого я использую xp_cmdshell.

Я еще не создал хранимую процедуру, но, по сути, содержимое хранимой процедуры будет

EXEC master..xp_cmdshell 'java -jar D:\...\...\...\Test_LowerJDK.jar';

Я пытаюсь запустить эту строку через SQL Server Management Studio, просто чтобы посмотреть, будет ли она работать, прежде чем я создам официальную хранимую процедуру. Однако, когда я запускаю его, он дает мне следующее сообщение.

Не удалось получить доступ к jar-файлу D:.........\Test_LowerJDK.jar

Я не уверен, почему это происходит. Я предполагаю, что это потому, что я не смог перейти в нужный каталог. Если это так, как я могу перейти в нужный каталог, чтобы запустить файл jar в этом каталоге.

К вашему сведению, я попытался запустить файл jar из каталога, в котором он сохранен, через командную строку с помощью

java -jar Test_LowerJDK.jar

Также я попытался открыть командную строку в C: и сделал следующее

java -jar D:\...\...\...\Test_LowerJDK.jar

Оба работают нормально.

Кроме того, я попытался отобразить свой текущий рабочий каталог с помощью xp_cmdshell, используя,

EXEC master..xp_cmdshell 'dir';

И похоже, что мой текущий рабочий каталог

Каталог C:\Windows\system32

Я не хотел вставлять свой jar-файл в C:\Windows\system32, потому что могу все испортить? Я не уверен, поэтому я этого не сделал.


person Krish    schedule 22.09.2016    source источник
comment
Несколько вещей, которые нужно попробовать: 1) Убедитесь, что разрешения для пользователя БД в порядке. 2) Убедитесь, что java находится в пути для этого пользователя. 3) Попробуйте указать путь к файлу в двойных кавычках, например. EXEC master..xp_cmdshell 'java -jar D:\...\...\...\Test_LowerJDK.jar' 4) Убедитесь, что это локальный путь к серверу базы данных;   -  person Nick Pfitzner    schedule 22.09.2016
comment
Кроме того: делайте только одно из них за раз! :) Иногда вы упускаете фактическое решение, если идете кувалдой   -  person Nick Pfitzner    schedule 22.09.2016
comment
Привет @Ник Пфитцнер! Спасибо за это, но за 1) я уже использую пользователя-администратора. Ранее я использовал другого пользователя, и всякий раз, когда я использовал xp_cmdshell, отображалось сообщение о том, что у меня нет разрешения. Так что нет, я уже использую учетную запись администратора. Для 2), я не уверен, что вы имеете в виду. Но поскольку версия Java отображается правильно, когда я набираю java -version в командной строке, я думаю, что с этим все в порядке. Для 3) я попытался поставить двойные кавычки в пути, но все же это дает мне то же сообщение о невозможности доступа к jarfile   -  person Krish    schedule 22.09.2016
comment
@ Ник Пфитцнер, я смог указать, что не так. Спасибо за ваш комментарий!   -  person Krish    schedule 22.09.2016


Ответы (1)


Я понял, почему я получил следующее сообщение.

Не удалось получить доступ к jar-файлу D:......\TeamFolder\Test_LowerJDK.jar

Папка, содержащая Test_LowerJDK.jar, доступна только для определенной группы пользователей. Моя учетная запись администратора не является частью группы, которая может получить доступ к TeamFolder, поэтому она не может получить доступ к jarfile.

Я попытался скопировать Test_LowerJDK.jar в C:\ и попробовал следующую команду.

EXEC master..xp_cmdshell 'java -jar C:\Test_LowerJDK.jar';

Это сработало хорошо.

Причина, по которой я сразу не подумал об этой ситуации, заключается в том, что, используя учетную запись администратора, я действительно могу получить доступ и перейти к TeamFolder через проводник Windows. Я забыл тот факт, что TeamFolder на самом деле является локальной папкой на машине, где я вошел в систему как администратор, поэтому я могу аккуратно получить доступ к TeamFolder через проводник Windows.

person Krish    schedule 22.09.2016