Подтвердить что ты не робот

Не удалось запустить базу данных derby из Netbeans 7.4

Я загрузил Netbeans 7.4 и Java 7 Update 51. Я получаю следующую ошибку при попытке запустить Java DB или derby соединение с Netbeans. Это на ПК с Windows 8. Я загрузил версию для Windows XP 32 бит на работу. Он работает нормально. Я не уверен, чего не хватает.

Thu Jan 16 00:48:23 EST 2014 : Security manager installed using the Basic server security policy.
Thu Jan 16 00:48:24 EST 2014 : access denied ("java.net.SocketPermission" "localhost:1527" "listen,resolve")
java.security.AccessControlException: access denied ("java.net.SocketPermission" "localhost:1527" "listen,resolve")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:372)
at java.security.AccessController.checkPermission(AccessController.java:559)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at java.lang.SecurityManager.checkListen(SecurityManager.java:1134)
at java.net.ServerSocket.bind(ServerSocket.java:375)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at javax.net.DefaultServerSocketFactory.createServerSocket(ServerSocketFactory.java:231)
at org.apache.derby.impl.drda.NetworkServerControlImpl.createServerSocket(Unknown Source)
at org.apache.derby.impl.drda.NetworkServerControlImpl.access$000(Unknown Source)
at org.apache.derby.impl.drda.NetworkServerControlImpl$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.derby.impl.drda.NetworkServerControlImpl.blockingStart(Unknown Source)
at org.apache.derby.impl.drda.NetworkServerControlImpl.executeWork(Unknown Source)

at org.apache.derby.drda.NetworkServerControl.main(Unknown Source)

connection propertiesjava db properties

4b9b3361

Ответ 1

Это то, что я сделал:

  • Узнайте, где именно находится дом java, выполнив эту инструкцию из NetBeans 7.4:

    System.out.println(System.getProperty("java.home"));

    Это вывод для моего случая:

    C:\Program Files\Java\jdk1.7.0_51\jre

    что для меня очень важно, я изменял еще один java.policy и ничего не делал и потратил пару часов.

  • По причине java.policy является файлом стиля unix и доступен только для чтения, я открыл и отредактировал его с помощью блокнота ++ и выполнил его как администратор (под тем же самым java-адресом):

    C:\Program Files\Java\jdk1.7.0_51\jre\lib\security\java.policy

    Добавьте только эти строки в файл после первого гранта:

    grant {
        permission java.net.SocketPermission "localhost:1527", "listen";
    };
  • Сохраните файл, что немного сложно по причине разрешения. Но если вы запускаете notepad ++ или любую другую программу редактирования в качестве администратора, вы можете решить эту проблему.

    Тогда попробуйте подключить базу данных из NetBeans, она работает для меня.

Удачи.

Ответ 2

Согласно Java ™ SE Development Kit 7, заметки о выпуске обновления 51

Изменение разрешений сокета по умолчанию

Разрешения сокета по умолчанию, назначенные для всего кода, включая ненадежный код, были изменены в этой версии. Раньше весь код мог связывать любой тип сокета с любым номером порта, большим или равным 1024. По-прежнему можно связывать сокеты с эфемерным диапазоном портов в каждой системе. Точный диапазон эфемерных портов варьируется от одной операционной системы к другой, но обычно она находится в большом диапазоне (например, от 49152 до 65535). Новое ограничение заключается в том, что привязка сокетов за пределами эфемерного диапазона теперь требует явного разрешения в политике безопасности системы.

Большинство приложений, использующих клиентские сокеты tcp и диспетчер безопасности, не будут видеть никаких проблем, так как они обычно привязаны к эфемерным портам. Приложения, использующие сокеты datagram или серверные сокеты tcp (и диспетчер безопасности), могут сталкиваться с исключениями безопасности, когда их никто не видел раньше. Если это происходит, пользователи должны проверить, будет ли ожидаемый номер порта запрашиваться, и если это так, разрешение разрешения сокета может быть добавлено в локальную политику безопасности для устранения проблемы.

Это означает, что вы должны явно указать разрешения для вашего приложения, чтобы иметь доступ к диапазону портов между 1025 и 49151. Поэтому вы можете предоставить это разрешение, добавив эту строку в список предоставленных разрешений:

Посетите свой домашний каталог Java и получите доступ к файлу политики в $JAVA_HOME/jre/lib/security/java.policy и внесите следующие изменения.

grant{
     //List of granted permissions
     permission java.net.SocketPermission "localhost:1527", "listen";
}

Ответ 3

См. http://www.oracle.com/technetwork/java/javase/7u51-relnotes-2085002.html для описания "проблемы". Поиск других-libs/javadb

В зависимости от вашего требования, что я сделал, это пойти и изменить политику безопасности по умолчанию.

cd $JAVA_HOME/jre/lib/security

Изменить java.policy (сначала сделать резервную копию!)

Добавьте следующий

grant codeBase "file:${java.home}}/../db/lib/*" {
        permission java.security.AllPermission;
};

Обратите внимание, что это мое требование.

Я предоставляю каждому приложению, которое использует u51 JRE разрешение на запуск Derby.

ИЗМЕНИТЬ

Альтернативой будет использование менее разрешительного набора разрешений, например:

grant codeBase "file:${java.home}}/../db/lib/*" {
    permission java.net.SocketPermission "localhost:1527", "listen,resolve";
};

NetBeans по умолчанию использует версию дерби, установленную с GlassFish. Таким образом, мои разрешения выглядят так на Mac. Он будет похож на Windows, но путь должен измениться.

grant codeBase "file:/Applications/NetBeans/glassfish-4.0/javadb/lib/*" {
    permission java.net.SocketPermission "localhost:1527", "listen,resolve";
};

Ответ 4

Поскольку верхние меры не работали, я добавил следующее разрешение в конец раздела основного разрешения:

permission java.net.SocketPermission "localhost:1527", "listen,resolve";

Ответ 5

Вы также можете решить проблему для каждого пользователя, предоставив необходимое разрешение в файле с именем .java.policy в вашем домашнем каталоге.

Работает как в системах Unix, так и в Windows, как описано здесь: http://docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyFiles.html

Это может быть полезно, если файл политики всей системы будет перезаписан, например, при обновлении JDK или если у вас нет прав на редактирование системного файла.

Это то, что у меня есть в моем $HOME/.java.policy:

grant {
    permission java.net.SocketPermission "localhost:1527", "listen";
};

Ответ 6

Я немного устал от подхода Oracle к безопасности в последнее время. Кажется, они пытаются защитить нас от самих себя способами, которые были бы более подходящими для наивных пользователей, чем программисты. Я считаю, что код, который я накладываю на свою собственную машину, должен иметь возможность делать все, что нужно. Это моя вина, если я там ставил там код, который делает плохие вещи. Ясно, что это не универсально надежная перспектива, но она работала для меня около 35 лет. Исходя из этого, я добавляю это в файл /lib/security/java.policy:

grant codeBase "file:/-" {
    permission java.security.AllPermission;
};

обратите внимание, что файл:/- соответствует любому файлу в системе, и блок-грант говорит, по существу, "если класс загружен из этой файловой системы, тогда доверяйте ему".

Ответ 7

Это немного помолодело, пока я не наткнулся на следующее в вики NetBeans

Права доступа к JavaDB

Разрешения на предоставление разрешений JavaDB

Как предоставить разрешения для Java DB/Как запустить Java DB

Связано с проблемой # 239962

JDK 7u51 поставляется с некоторыми улучшениями в области безопасности, которые вызывают  проблемы с запуском Java DB на этой версии Java.

Когда вы пытаетесь запустить БД из NetBeans, вы, вероятно, получите  Исключение:

java.security.AccessControlException: доступ запрещен  ( "java.net.SocketPermission" "localhost: 1527" "слушать, решать" )

То же самое исключение вы получите при запуске с помощью script/db/bin/startNetworkServer

Потому что нет подходящего способа исправить это на стороне NetBeans и  это должно быть исправлено на стороне Java DB.

Существует несколько способов решения этой проблемы. Я остановлюсь  только самый простой способ. Вы должны запустить БД вручную из командной строки.

• Запустите Java DB с аргументом -noSecurityManager.

(местоположение JDK 7u51)/db/bin/startNetworkServer -noSecurityManager

Хотя это не совсем решение, оно можно использовать в качестве быстрого решения.

Ответ 8

Моим решением было переустановить jdk 1.7.45, удалить netbeans и переустановить его, выбрав устаревший jdk. Не знаю, есть ли способ изменить sdk в NB, не переустанавливая его, но он работал таким образом.

Ответ 9

Ну, одна из альтернатив заключается в том, чтобы изменить порт JavaDB, который прослушивается, чтобы теперь находиться в высоком диапазоне (например, от 49152 до 65535). Перейдите в Window- > Services, затем щелкните правой кнопкой мыши Java DB и в "Java DB Properties Dialog" перейдите к "Расположение базы данных", который в моей системе "C:\Users\ahernandeza.netbeans-derby" В этом каталоге отредактируйте или создайте файл derby.properties и добавьте/отредактируйте строку: derby.drda.portNumber = XXXX Где XXXX - новый порт, в моем случае я поставил 51527 и работал отлично.

ИЗМЕНИТЬ С первого взгляда он работал, сервис начался очень хорошо, но при создании или запуске базы данных в NB я получил ошибку "Не удалось подключиться". CA не установить соединение с jdbc: derby://localhost: 1527/sample Хотя я изменил pprt на 51527, он пытается подключиться к 1527

Ответ 10

Если linux, то

file=`find $(dirname $(readlink -f $(which java)))/.. -iname 'java.policy'`; grep 1527 $file || sudo sed -i '0,/"listen"/{s/"listen".*/\0\n\tpermission java.net.SocketPermission "localhost:1527", "listen";/}' $file
cat $file

он автоматически находит ваши java и разрешает изменения

Ответ 11

Я нашел быстрое решение этой проблемы - Запустите JavaDB из командной строки \terminal следующим образом:

<base folder>/db/bin/startNetworkServer -noSecurityManager

Затем он работает нормально, не добавляя новые разрешения.

Ответ 12

Проблема заключается в Java 7u51, у нее есть ошибка, которая влияет на Derby и другие программы и библиотеки, я предлагаю установить Java 7u45