подключение приложения к базе данных

#java #mysql #database

#java #mysql #База данных

Вопрос:

Я работаю над приложением, которое будет использоваться школами. Каждая школа настроит их в базе данных. И каждая школа предоставит приложению свой собственный файл «настроек». Файл настроек будет содержать URL-адрес базы данных для конкретной школы, которая создала файл настроек. Это делается для того, чтобы учащийся, использующий приложение, мог просто загрузить другой файл настроек, если он хочет подключиться к другой базе данных.

Мой вопрос в том, как мне защитить имя пользователя и пароль, используемые для подключения к базе данных? Таким образом, только приложение имеет доступ для чтения и записи к базе данных. И приложение имеет доступ на чтение и запись только к этой конкретной школе?

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

Спасибо

Комментарии:

1. итак, ваше приложение — это веб-приложение или настольное приложение? вы хотите зашифровать пароль в приложении? файл настроек содержит только URL-адрес базы данных, но не содержит информации о пользователе / пароле, верно? кстати, вы можете создать пользователя базы данных для определенной БД, вся база данных находится на одном сервере БД

2. рабочий стол, я хочу защитить имя пользователя и пароль, используемые приложением для аутентификации в базе данных, файл настроек содержит только URL-адрес db. Имя пользователя и пароль приложения используются для предоставления приложению прав на чтение / запись в БД.

Ответ №1:

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

В случае, если вы используете Spring, вы можете определить свой db.properties как:

  jdbc.driver=com.mysql.jdbc.Driver
 jdbc.url=jdbc:mysql://localhost/yourdb
 jdbc.username=userName
 jdbc.password=ENC(A6L729KukPEx7Ps8didIUWb01fdBRh7d)
  

и настройте его с помощью Jasypt и Spring как:

 <bean class="org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfigurer">
   <constructor-arg>
     <bean class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
       <property name="config">
         <bean class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
           <property name="algorithm" value="PBEWithMD5AndDES" />
           <property name="passwordEnvName" value="APP_ENCRYPTION_PASSWORD" />
         </bean>
       </property>
     </bean>
   </constructor-arg>
   <property name="locations">
     <list>
       <value>classpath:/META-INF/props/db/db.properties</value>
     </list>
   </property>   
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>
  

Это скрыло бы фактический пароль (вы можете сделать то же самое для username ) от учащихся, поэтому они не смогут получить строку подключения, просмотрев файл свойств.

В случае, если вы не используете Spring, вот руководство Jasypt для достижения того же «вручную»

Комментарии:

1. Я не уверен, что такое spring, но это строго настольное приложение. означает ли это, что мне придется выполнять ручную версию, о которой вы упомянули?

2. @prolink 007, на самом деле не имеет значения, является ли это настольным приложением, веб-приложением или демоном. Вы все равно можете использовать Spring, если хотите. Взгляните на документ , сначала это может показаться ошеломляющим, поскольку Spring делает много и много интересных вещей. Однако, если это не то, что вы хотите изучить в данный момент, шифрование учетных данных «вручную» с помощью Jasypt различными средствами шифрования паролей (например, BasicPasswordEncryptor, StrongPasswordEncryptor и т. Д.) Также Является довольно надежным вариантом