#java #mysql #database
#java #mysql #База данных
Вопрос:
Я работаю над проектом, и мне было интересно, какой будет наилучшая практика для следующего сценария?
Я разрабатываю приложение, которое должно иметь контроль доступа пользователя. Когда пользователь запускает приложение, ему будет предложено ввести имя пользователя и пароль. Приложение разработано таким образом, что пользователи будут подключаться к разным базам данных в зависимости от того, из какой школы они. Итак, у каждой школы будет свой адрес базы данных. Итак, должен ли я также запрашивать у пользователя URL-адрес базы данных в приглашении для входа в систему?
Кроме того, как мне изменить строгий доступ к базе данных, чтобы разрешить только этому приложению доступ к базе данных? Например, вы не можете запустить другое приложение и попытаться подключиться к этой базе данных с тем же именем пользователя и паролем, потому что это неправильное приложение?
Спасибо, если вам нужно, чтобы я объяснил что-нибудь еще, пожалуйста, дайте мне знать.
Подробнее:
Список школ не будет установлен во время компиляции. Школы будут выбирать использование приложения, а затем настраивать базу данных для использования программного обеспечения, а затем их учащиеся будут использовать приложение. Таким образом, не было бы первоначального списка школ. Что бы вы предложили для решения этой проблемы?
У каждого школьного хоста свой собственный сервер.
Комментарии:
1. Вы уверены, что вам нужна совершенно другая база данных, а не разные таблицы для каждой школы? Мне это кажется громоздким, но у вас могут быть свои причины.
Ответ №1:
Нет необходимости создавать разные базы данных для каждой школы или даже разные таблицы, если на то пошло.
Вы можете просто использовать такие таблицы, как
school -- all schools with data belonging to that school.
------------
id integer primary key auto_increment
name varchar(255)
unique index idx_school (name)
user -- all users from all schools in one table.
--------
id integer primary key auto_increment
username varchar(255)
passhash varchar(200) -- hashed and salted password
salt varchar(10) -- salt used, not encrypted, but different per user.
school_id integer not null foreign key references school(id)
unique index idx_user (username, school_id)
Выберите пользователя с помощью:
SELECT u.id FROM user u
INNER JOIN school s ON (s.id = u.school_id)
WHERE s.name = :schoolname
AND u.name = :username
AND u.passhash = SHA2(CONCAT(salt,:password),512)
Это :....
ваши параметры.
Комментарии:
1. Список школ не будет установлен во время компиляции. Школы будут выбирать использование приложения, а затем настраивать базу данных для использования программного обеспечения, а затем их учащиеся будут использовать приложение. Таким образом, не было бы первоначального списка школ. Что бы вы предложили для решения этой проблемы?
2. Вы добавляете школы по мере необходимости, поэтому есть список школ. Очень просто и очень гибко, и намного проще, чем каждый раз добавлять новую базу данных, а также намного безопаснее.
3. Да, но каждая школа должна размещать свой собственный сервер. Таким образом, их информация остается конфиденциальной для них и только для них. Я добавлю это к сообщению, возможно, это было непонятно.
4. Я думаю, что я собираюсь сделать, это иметь файл свойств, связанный с приложением. Затем администратор школы изменит значение DB по умолчанию в файле свойств на адрес DB, а затем каждый пользователь загрузит приложение с веб-сайта своей школы. Приложение, которое они загружают, будет иметь этот файл свойств, и он будет специфичен для их школы. Как это звучит?
Ответ №2:
Вместо того, чтобы просить пользователей выбрать или ввести соответствующий им адрес базы данных, вы можете использовать пароль, который они будут использовать для аутентификации, и заставить пользователя использовать тот же пароль в соответствующей школьной базе данных с ограниченными привилегиями (например, для обновления, вставки и т. Д. Только Без указания удаления или удаления). Таким образом, в зависимости от выбранной школы будет выбран соответствующий URL-адрес базы данных (жестко заданный или загруженный из файла конфигурации), и введенный пароль будет использоваться для подключения, если он правильный, тогда подключение к базе данных произойдет успешно.
Хотя это не решает вторую проблему других приложений, обращающихся к базе данных с теми же учетными данными. Обновит ответ, если я подумаю об этом.