2015-10-09 4 views
1

Учитывая два сервера MySQL, один локальный, один удаленный. Оба имеют базу данных foobar, содержащую таблицу bohica. Локальный сервер имеет имя пользователя myadmin '@'% ',' myadmin '@' localhost '. Удаленный сервер имеет имя пользователя myadmin '@'% ',' myadmin '@' localhost 'и' myadmin'@'my.domain.com '.Приложение java не может подключиться к удаленному MySQL db, но может подключаться к локальному MySQL db

Привилегии были предоставлены всем этим пользователям и привилегии покраснели.

Оба сервера подняты.

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

mysql --user=myadmin --password=mylocalpw 
mysql --user=myadmin --password=myremotepw --host=my.domain.com 

И получится, что доказывает, что я могу достигнуть и войти на удаленный сервер.

Мой Java/Maven/спящий режим приложение имеет файл контекста

... 
<bean id="databasePropertiesServerB" 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
<!-- 
    <property name="location"   value="classpath:databaseServerBlocal.properties" /> 
--> 
    <property name="location"   value="classpath:databaseServerBliveadmin.properties" /> 
    <property name="placeholderPrefix" value="$dbServerB{" /> 
    <property name="placeholderSuffix" value="}" /> 
</bean> 

<bean id="dataSourceServerB" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close"> 
    <property name="uniqueResourceName" value="XADBMS_B" /> 
    <property name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" /> 
    <property name="xaProperties"> 
     <props> 
      <prop key="databaseName">foobar</prop> 
      <prop key="user">$dbServerB{hibernate.connection.username}</prop> 
      <prop key="password">$dbServerB{hibernate.connection.password}</prop> 
     </props> 
    </property> 
    <property name="poolSize"><value>20</value></property> 
    <property name="testQuery" value="SELECT 1" /> 
</bean> 

<bean id="emfB" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="packagesToScan"   value="com.mybiz.forms" /> 
    <property name="dataSource"    ref="dataSourceServerB" /> 
    <property name="jpaDialect"    ref="jpaHibernateDialect" /> 
    <property name="jpaVendorAdapter"  ref="jpaHibernateVendorAdapter" /> 
    <property name="jpaProperties"> 
    <props> 
     <prop key="hibernate.dialect">$dbServerB{hibernate.dialect}</prop> 
     <prop key="hibernate.connection.characterEncoding">$dbServerB{hibernate.connection.characterEncoding}</prop> 
     <prop key="hibernate.connection.driver_class">$dbServerB{hibernate.connection.driver_class}</prop> 
     <prop key="hibernate.connection.url">$dbServerB{hibernate.connection.url}</prop> 
     <prop key="hibernate.connection.release_mode">$dbServerB{hibernate.connection.release_mode}</prop> 
     <prop key="hibernate.cache.provider_class">$dbServerB{hibernate.cache.provider_class}</prop> 
     <prop key="hibernate.c3p0.min_size">$dbServerB{hibernate.c3p0.min_size}</prop> 
     <prop key="hibernate.c3p0.max_size">$dbServerB{hibernate.c3p0.max_size}</prop> 
     <prop key="hibernate.c3p0.timeout">$dbServerB{hibernate.c3p0.timeout}</prop> 
     <prop key="hibernate.c3p0.max_statements">$dbServerB{hibernate.c3p0.max_statements}</prop> 
     <prop key="hibernate.show_sql">$dbServerB{hibernate.show_sql}</prop> 
     <prop key="hibernate.format_sql">$dbServerB{hibernate.format_sql}</prop> 
     <prop key="hibernate.hbm2ddl.auto">$dbServerB{hibernate.hbm2ddl.auto}</prop> 
     <prop key="hibernate.transaction.factory_class">com.atomikos.icatch.jta.hibernate3.AtomikosJTATransactionFactory</prop> 
     <prop key="hibernate.transaction.manager_lookup_class">com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup</prop> 
    </props> 
    </property> 
</bean> 
... 

и файлы Недвижимость Болгария Недвижимость databaseServerBliveadmin.properties

hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect 
hibernate.connection.characterEncoding=UTF-8 
hibernate.connection.driver_class=com.mysql.jdbc.Driver 
hibernate.connection.url=jdbc:mysql://my.domain.com:3306/foobar 
hibernate.connection.username=myadmin 
hibernate.connection.password=myremotepw 
hibernate.connection.release_mode=after_transaction 
hibernate.cache.provider_class=org.hibernate.cache.NoCacheProvider 
hibernate.c3p0.init_size=10 
hibernate.c3p0.min_size=10 
hibernate.c3p0.max_size=50 
hibernate.c3p0.timeout=600 
hibernate.c3p0.max_statements=50 
hibernate.show_sql=false 
hibernate.format_sql=true 
hibernate.hbm2ddl.auto=create 

и databaseServerBlocaladmin.properties

hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect 
hibernate.connection.characterEncoding=UTF-8 
hibernate.connection.driver_class=com.mysql.jdbc.Driver 
hibernate.connection.url=jdbc:mysql://localhost:3306/foobar 
hibernate.connection.username=myadmin 
hibernate.connection.password=mylocalpw 
hibernate.connection.release_mode=after_transaction 
hibernate.cache.provider_class=org.hibernate.cache.NoCacheProvider 
hibernate.c3p0.init_size=10 
hibernate.c3p0.min_size=10 
hibernate.c3p0.max_size=50 
hibernate.c3p0.timeout=600 
hibernate.c3p0.max_statements=50 
hibernate.show_sql=false 
hibernate.format_sql=true 
hibernate.hbm2ddl.auto=update 

Теперь он получает странно. Когда я корректирую значение свойства «location» в компоненте «databasePropertiesServerB» для использования databaseServerBlocal.properties, приложение может подключаться к локальному серверу и выполнять свою работу, как ожидалось.

НО (и вы знали, что НО идет ...)

Когда я регулирую «местоположение» значение свойства в «databasePropertiesServerB» боб использовать databaseServerBliveadmin.properties, я получаю страшный

java.sql.SQLException: Access denied for user 'myadmin'@'localhost' (using password: YES) 

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

ТИА,

Еще обучения STEV

+0

Я хотел бы избежать с помощью% (подстановочные) при создании учетных записей пользователей БД. Это позволяет любому серверу подключаться, если они знают имя пользователя/пароль. Кроме того, я хотел бы использовать уникальное имя пользователя для каждого приложения для повышения безопасности. Наконец, никогда не ставьте сервер базы данных в свой общедоступный DNS. Он должен храниться внутри и в вашем файле/etc/hosts вместо этого, если вы используете linux. – user1052448

+0

Сообщение об ошибке похоже на использование другого файла свойств. Я бы создал другую учетную запись пользователя и пароль и попытался повторно подключиться. – user1052448

+0

Нет, я могу подтвердить, что databaseServerBliveadmin.properties используется при выборе, временно меняя имя пользователя на helloThere и достаточно уверенное, что появляется в сообщении об ошибке. – user1201168

ответ

0

полный ответ появится здесь в следующем вопросе

cannot achieve connectivity with MySQL db on remote machine

в основном, все о свойствах Hibernate файла, а также учетные записи и пароли на обоих экземпляры MySQL были правильными - причина не заключалась явно в установке свойства xaProperties.server в компоненте источника данных Atomikos, который используется заводом-изготовителем сущности b ean - если не explicity, то он по умолчанию имеет значение «localhost», который, конечно, не работает на удаленном компьютере, потому что он пытается войти в систему как xxxxx.%

Sneaky подлый подлый.

ДЕЛО ЗАКРЫТО

Еще обучения Стив

Смежные вопросы