Я устанавливаю приложение, которому требуется база данных Oracle на моем сервере. БД размещена на другом выделенном сервере.
Приложение использует JDBC для подключения к БД.
Я проверил соединение с sqlplus, и результат в порядке с tnsnames.ora и без него:
export TNS_ADMIN=/opt/oracle/network/admin
export ORACLE_SID=MYDB
sqlplus user@MYDB
в порядке.
Без tnsnames.ora я также могу подключиться к БД:
sqlplus user/pwd@server:1521/MYDB
работает нормально.
Но когда я подключаюсь через драйвер jdbc java, подключение происходит со следующим исключением:
-------- Oracle JDBC Connection Testing ------
Oracle JDBC Driver Registered!
Connection Failed! Check output console
java.sql.SQLRecoverableException: No more data to read from socket
at oracle.jdbc.driver.T4CMAREngineStream.unmarshalUB1(T4CMAREngineStream.java:456)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:397)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257)
at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:437)
at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:954)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:639)
at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:666)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:566)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at OracleJDBC.main(OracleJDBC.java:29)
Если отключить службу firewalld, соединение с JDBC будет в порядке.
В firewalld я создал следующую службу "oracle" (в / etc / firewalld / services):
[root@frtls3dxr2017-i 1]# ll /etc/firewalld/services/oracle.xml
-rw-r----- 1 root root 196 Jun 15 10:00 /etc/firewalld/services/oracle.xml
[root@frtls3dxr2017-i 1]# ll /etc/firewalld/services/oracle.xml
-rw-r----- 1 root root 196 Jun 15 10:00 /etc/firewalld/services/oracle.xml
[root@frtls3dxr2017-i 1]# firewall-cmd --list-services
tomee_fcsremote http 3dnotification tomee_3dcomment tomee_fedsearch dhcpv6-client tomee_3dspaceinternal tomee_3ddashboard tomee_3dpassport tomee_3dspace ssh https oracle tomee_fcscentral
[root@frtls3dxr2017-i 1]# cat /etc/firewalld/services/oracle.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>oracle port for jdbc</short>
<description>oracle
Firewall rules</description>
<port protocol="tcp" port="1521"/>
</service>
Нужно ли мне добавить дополнительный порт в XML-файл службы, чтобы разрешить подключение к БД (исходящий трафик)?
Это не было проблемой брандмауэра.
Проблема заключалась в том, что служба rngd не использовала / dev / urandom. Мне пришлось изменить файл служебной единицы, добавив -r / dev / urandom:
ExecStart = / sbin / rngd -f -r / dev / urandom
Это также можно было решить, изменив ключ java.security securerandom.source:
securerandom.source = файл: / dev / urandom