добавление форума: совместное использование базы данных или создание новой? - PullRequest
1 голос
/ 21 апреля 2011

Мой сайт имеет базу данных MySQL с около 50 таблицами. Я усердно работаю, чтобы сделать его как можно более надежным и безопасным.

Согласно нашему плану развития, мы добавим форум в недалеком будущем.

Я не уверен, лучше ли иметь форум в своей собственной базе данных или вставлять все его таблицы в нашу существующую базу данных. Я перечислил плюсы и минусы обоих подходов ниже, как я их понимаю, и был бы признателен за советы от тех, кто более осведомлен и опытен, чем я, а это почти все из вас:

Объединено в существующую базу данных

1010 * Pros *

  • Упростить интеграцию данных форума в существующий сайт (пример: использование тегов веток форума для сопоставления тем со страницами сайта и автоматического отображения ссылок на соответствующие обсуждения)
  • может объединить таблицу существующих пользователей с форумом, поэтому пользователям не нужно повторно регистрироваться, чтобы начать пользоваться форумом
  • резервные копии "все в одном"

Против

  • Я немедленно добавил огромное количество нового кода, часть которого имеет доступ к базе данных, и все это гораздо более высокая цель профиля для махинаций, то есть моя оригинальная база данных теперь подвергается гораздо большему риску атаки *
  • обновление программного обеспечения форума будет более практичным, поскольку это не будет прямым провалом базы данных

Отдельные базы данных для форума и основного сайта

Плюсы

  • простая установка, тестирование, обновление, снос форума
  • дыры в безопасности базы данных форума не подвергают риску мой основной сайт (и наоборот)

Против

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

Твои мысли? : -)

Ответы [ 3 ]

1 голос
/ 21 апреля 2011

Запрос из 2 баз данных:

select db1.a.field1, db2.b.field2 from db1.a
inner join db2.b on (db1.a.id = db2.b.id);

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

0 голосов
/ 21 апреля 2011

объединено в существующую базу данных Плюсы

  1. Интегрировать данные форума в существующий сайт проще. [ nope . с точки зрения кодирования нет никакой разницы между выполнением запроса в одной базе данных по сравнению с другой. Кроме того, ваши запросы сами могут пересекать базы данных.]

  2. может объединить таблицу существующих пользователей в форум, поэтому пользователям не нужно повторно регистрироваться, чтобы начать пользоваться форумом. [ Нету . Да, вы можете сделать это, но вы можете сделать это, даже если таблицы форума не находятся в этой базе данных. Так что мытье]

  3. резервные копии «все в одном». [ Я думаю, что вы здесь понимаете. Будь то одна база данных или две, процедуры резервного копирования одинаковы. Разница лишь в том, что у вас есть 1 или 2 файла]

Против

  1. Я мгновенно добавил огромное количество нового кода, часть которого имеет доступ к базе данных, и все это гораздо более высокая цель профиля для махинаций, что означает, что моя оригинальная база данных теперь подвергается гораздо большему риску атака. [ возможно . Если новый код использует динамический sql и / или не может использовать параметризованные запросы, он все равно облажается. Кроме того, если ваш уровень данных позволяет пользователю выполнять запросы при полном доступе к вашему серверу, что, к сожалению, является нормой для большинства приложений, то не имеет значения, находятся ли таблицы в одной базе данных или нет. Интересно, что сайт MySql был взломан таким образом месяц назад.]

  2. обновление программного обеспечения форума будет более практичным, поскольку это не будет прямым провалом базы данных. [? Я не совсем уверен, что вы имеете в виду под этим. Я никогда не слышал термин «флоп», используемый в этом контексте.]

Отдельные базы данных для форума и основного сайта Плюсы

  1. простая установка, тестирование, обновление, закрытие форума [ Нет .. У вас есть те же проблемы, независимо от того, в какой базе данных он находится]

  2. дыры в безопасности базы данных форума не подвергают риску мой основной сайт (и наоборот). [ зависит от типов дыр и от того, как именно реализована защита]

Против

  1. интеграция в существующий сайт требует запроса двух баз данных одновременно. Я подозреваю, что это будет довольно сложно программировать. [ Это не так. Он имеет точно такой же уровень сложности. Также ваши запросы могут пересекать базы данных.]

  2. пользователям придется повторно зарегистрироваться на форуме [ Нет. Вы можете повторно использовать ту же таблицу пользователей в другой таблице]

  3. резервное копирование 2 баз данных, а не одной (это минус, но это минус). [ Я бы не согласился , но с другой стороны, у нас есть десятки баз данных на наших серверах, и все наши резервные копии автоматизированы. Черт возьми, как только мы создадим план обслуживания, он автоматически добавится в расписание резервного копирования на ночь, так что это даже не мысль.]

Честно говоря, я бы сказал, что единственная потенциальная проблема заключается в том, как новый материал форума получает доступ к базе данных и какие именно права пользователя нужны этой учетной записи для выполнения своей работы. Если все сделано правильно, то это не проблема; но если все сделано неправильно , то единственной реальной защитой будет размещение программного обеспечения форума на собственном сервере баз данных ... и даже тогда это может вызвать проблемы.

Но это должно быть идентифицировано надлежащим аудитом безопасности.

0 голосов
/ 21 апреля 2011

Подход, который зарекомендовал себя для меня:

  1. Установить форум как отдельную систему
  2. написать тонкий слой для общего входа (если оба используют открытый идентификатор или что-то подобное, будь счастлив)
  3. Со временем я медленно и осторожно объединяю две системы, где это имеет смысл, обычно это не так. Я люблю обмениваться данными между двумя базами данных, используя представления.1010 *
...