С IFEXISTS=TRUE
проблема очевидна, но без этого параметра или с попыткой установить его на FALSE
ситуация не изменится.
Все последние версии базы данных H2 не позволяют удаленное (включая локальные TCP-соединения) создание базы данных по умолчанию в целях безопасности. Когда это разрешено, каждый, кто может подключиться к вашему порту, может создать новую базу данных, получить в ней привилегии ADMIN и, следовательно, получить такой же доступ к вашей системе, как ваша JVM и ваша учетная запись пользователя.
К сожалению, H2 1.4.199 выдает сбивающее с толку сообщение об ошибке, оно было улучшено только в 1.4.200, и в этой версии (когда IFEXISTS=TRUE
не использовалось) сообщение об ошибке «База данных… не найдена, либо предварительно создайте ее, либо разрешите удаленную базу данных» создание (не рекомендуется в безопасных средах) ».
Если вы используете сервер TCP (или Pg / ODB C), вам необходимо каким-либо другим способом создавать базы данных, прежде чем пытаться подключиться к ним через сеть протокол.
Например, вы можете открыть соединение JDB C (DriverManager.getConnection()
) со встроенным URL-адресом и немедленно закрыть его.
Вы можете заменить org.h2.tools.Server
на org.h2.tools.Console
и вы увидите другой URL-адрес http-соединения (если вы запустите его из командной строки), что-то вроде http://127.0.0.2:8082?key=12c58e1c5f9ce1ae88a2921f74e7655ed91a80746730cc6bfa8d4bbb464f69ee
; с помощью этого URL вы сможете создать базу данных из веб-интерфейса (только если удаление веб-интерфейса не включено).
Вы также можете добавить параметр -tool
(только для Console
, Server
не поддерживает его), чтобы получить значок H2 Console в системном трее, в его контекстном меню есть команда для создания новой базы данных, и этот значок также может открывать веб-интерфейс с тем же ключом безопасности. Не передавайте этот ключ никому. Однако он будет отличаться при каждом перезапуске.
Вы также можете использовать инструмент командной строки командной строки.
https://h2database.com/html/tutorial.html#creating_new_databases
В В худшем случае вы можете включить удаление базы данных, но это не совсем безопасно даже при локальных соединениях и совершенно небезопасно, когда включены удаленные соединения, как в вашем случае. У вас будет хорошо известная дыра в удаленной безопасности в вашей системе, я не думаю, что это ваше намерение.