Работа с двумя базами данных как с одной

Spear

почемучка
Работа с двумя базами данных как с одной

Здравствуйте,
у меня возникла такая проблема - уже часа два точно думаю, но все не решу как же лучше поступить.
есть движок сайта, есть форум.
Регистрация одна - регистрируются на форуме, а авторизация на сайт происходит по данным из таблиц БД форума.
то есть все таблицы - контента сайта и прочего и таблицы форумов в одной БД.
Вроде это не правильно.. да и не удобно. А иногда - стремно даже. Если за безопасность скриптов сайта я уверен (более-менее), то в опен-сорц форумах постоянно находят дыры.
Поэтому решено разделить базу форума и сайта, чтобы в случае взлома того или иного, не пострадали данные другого.

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

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

Если я не ошибаюсь есть ещё такой варинт - например база форума forum, а сайта - site.
Движок сайта использует класс для работы с БД, то есть имя бд, логин и пароль изменить в процессе работы нельзя.. (точнее можно если создать новое подключение и инициализировать новый класс.. или ак это правильно называется). Вообщем в любом случае - очень напряжный вариант (а посетителей много - не хочу чтобы сайт стал тормозить и тянуть за собой форум).
Так вот, можно же делать такие запросы если я не ошибаюсь:
select * from forum.users ....
то есть я подключившись к базе сайта делаю запросы в базу форума. Но это же сработает только если у них одинаковые пароли доступа?
Посоветуйте, пожалуйста, как лучше поступить. Честное слово - долго думал и пытался решить проблему сайм, но в тоге - половина 5ого утра, а я на форуме :)

одно дополнение - форум не использует никакие таблицы сайта. Только сайт - форумские.
 

kamatoz

Новичок
PHP:
$link = mysql_connect('host', 'mysql_user', 'mysql_password');
$link1 = mysql_connect('host', 'mysql_user1', 'mysql_password1');

mysql_query("select * from site.some_table", $link);
mysql_query("select * from forum.users", $link1);
 

Dreammaker

***=Ф=***
глянь [m]mysql_connect[/m]. Второй коммент сверху. Может поможет.

upd.: Не успел :)
upd2: Хотя там и другие случаи рассматриваются.
 

Spear

почемучка
я с БД работаю через готовый класс, поэтому прийдется и второй запрос делать через это класс.
Итого два подключения в разные БД, при большой нагрузке со стороны посетителей (колличеством своим). Как думаете, не загнется сайтик? Просто очень важно - проект становится все популярнее и популярнее. Не хотлось бы чтобы при нескольких сотнях пользователей в онлайне сервер повесился. Или это (два конекта в базу на каждую страницу) вполне нормальнео явлния на крупных порталах, как считаете?
 

Dreammaker

***=Ф=***
Ну пирожки серваку присниться могут и при одном коннекте. просто при тех же запросах нужно будет 2*несколько сотен пользователей. Или от кривости запросов.

А насчёт предложенного способа, так он кажись единственный. Другие какие в голову приходили, тоже требуют коннекта.

А вообще можно на разные компы базы разнести и хостить у разных хостеров :))
Ну это так чёрный раннеутренний юмор :)
 

Spear

почемучка
Dreammaker
спасибо большое за ответы.
Но незнаю.. чтото стремает так нагружать сервер..
понимаю, конечно, что хочу "и рыбку съесть".. и два подключения не делать :)
А как вам такой вариант, с точки зрения профессионализма - оставить базу форума и сайта в одной базе? Соотвественно из форумой админки уже снесены все функции работы с БД.
Или это черезчур по-аматорски?

-~{}~ 07.12.05 07:06:

да и такой вопрос - если сделать две БД, но с одним и тем же паролем доступа и именем пользовтаеля, то буду ли запросы вида
select a.name, b.somemething from forum.users as a, users as b where a.id=b.id
то есть берутся данные из базы форума и базы сайта.
Не является ли такой запрос неверным?
 

Dreammaker

***=Ф=***
Сейчас уже голова не работает, но единственный совет - нужно пробовать. Кажись всё же нужно указывать для обоих таблиц базы., откуда они берутся.

оффтоп: что-то мне кажется этой теме недолго жить осталось, до первого появления Фаната :)
 

Andreika

"PHP for nubies" reader
Spear
о сохранности каких данных, кроме списка пользователей и паролей (которые можно спереть как с твоего скрипта, так и с форума) ты беспокоишся и каким образом их можно будет достать/испортить?
 

Vander

Новичок
а можно одним коннектом, сменить базу на лету... сделать запрос с юзеров, потом назад базу поменять..
mysql_query ("USE $dbName");
 

whirlwind

TDD infected, paranoid
О какой защите может идти речь, если для обоих коннектов внутри все равно известны праметры подключения? Для внесения ограничений доступа, в каждой СУБД предусмотрена возможность назначения прав доступа в разрезе пользователей. Корректное назначение прав в совокупности с правильным дизайном это не просто хороший стиль, но и безопасность. Заведите столько пользователей БД, сколько требуется различных уровней доступа. Используйте VIEW где можно. Код менять не придется.

А несколько коннектов - это определенно лишняя головная боль, да и просто некрасиво.

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

svetasmirnova

маленький монстрик
whirlwind
>Используйте VIEW где можно.
В MySQL < 5 тоже можно?
>Код менять не придется.
Правда? А если логика приложения поменяется? К сожалению, жизнь web-сайта несколько стремительнее, чем программы Quark XPress.
Dreammaker
П почему теме осталось недолго жить?
 

whirlwind

TDD infected, paranoid
> В MySQL < 5 тоже можно?
Меньше нельзя. Но view - это очень хорошо.

> Правда? А если логика приложения поменяется?
Какая логика, какого приложения, форума? Его поддерживает другая команда, насколько я понял. И про неизменность кода было сказано относительно view.

PS. И наконец, Ваши предложения по теме?
 

Dreammaker

***=Ф=***
svetasmirnova, почему-то сложилось такое впечатление ночью :) Хотя сейчас она серьёзнее кажется.
 

Spear

почемучка
Spear
о сохранности каких данных, кроме списка пользователей и паролей (которые можно спереть как с твоего скрипта, так и с форума) ты беспокоишся и каким образом их можно будет достать/испортить?
затрудняюсь ответить на ворпос так как совершенно его не понял. Вы имеете ввиду что у меня и сайт и форум дырявыЕ, и в любом случае сопрут?
А данных которые можно спереть:
секретных там нету, но сайт на доволльно мощной ЦМС 9в моем понимании), и порча таблиц приведет к немедленному нарушению работы разделом сайта.
 

hohoho

Новичок
Блин, ну создай два экземпляра класса, чё тут гемороиться-то.

Вообще помоему топик из разряда "горе от ума".
 

svetasmirnova

маленький монстрик
whirlwind
А ваши предложения во всём остальном хороши. И реализуются вне зависимости от возможностей создавать/не создвавть view.
>Какая логика, какого приложения, форума? Его поддерживает другая команда, насколько я понял.
Насколько я поняла, приложение поддерживает автор топика, а форум готовый. Отсюда и все проблемы.
>И про неизменность кода было сказано относительно view.
Это как?
(извиняюсь, что офтоплю, но мне интересно)
Spear
>Вы имеете ввиду что у меня и сайт и форум дырявыЕ, и в любом случае сопрут?
Нет, я думаю, он имел в виду кое-что другое. Ты говоришь, что будешь коннектиться с одним паролем к базе сайта, а с другим к базе форума. Из *одного* приложения. И к чему все проблемы? Тоже самое можно сделать, используя один пароль: просто назначить пользователю одни права для базы сайта, а другие для базы форума:
Конкретно для вашего случая один пользователь, который будет фигурировать в скриптах форума, будет иметь доступ только к таблицам форума. Второй пользователь получает доступ только на чтение к таблице пользователей форума и полный доступп к другим специфическим таблицам.
Чтобы стало совсем понятно, почитайте как организовано управление правами доступа для разных пользователей в вашей базе.
 

whirlwind

TDD infected, paranoid
svetasmirnova
>приложение поддерживает автор топика, а форум готовый

А как можно знать, что форум дырявый, при этом использовать его (данные) в качестве основы для собственной разработки и быть уверенным в безопасности? Если собственная БД и БД форума никак не коррелируют, то большого смысла хранить таблицы в одной базе я не вижу. Возможно такой подход - это следствие определенной ситуации, решение которой не зависит от топикстартера. Тогда наиболее ИМХО корректный вариант - это жесткое разделение доступа в разрезе пользователей. Если и это недоступно, то других приемлимых вариантов я пока не вижу.

>>И про неизменность кода было сказано относительно view.
>Это как?

Вью служай гейтвеем м-ду форумом и собственной разработкой. Если вдруг по каким то причинам меняется структура таблиц форума (т.е. неподконтрольный фактор), переписывается вьюхи, но код собственной разработки остается неизменным. Это срабатывает почти всегда.
 
Сверху