Работа с внешней базой данных

Re: Работа с внешней базой данных

от Виталий Лавров -
Количество ответов: 9
Изображение пользователя Эксперт по Moodle

Не совсем так.

При попытке логина в moodle и отсутствии логина в локальной базе, moodle запрашивает данные из внешней базы. Если там есть данные, то создается локальный логин (с данными из внешней базы). При последущих логинах по внешней базе проверяется только пароль.

 

В ответ на Виталий Лавров

Re: Работа с внешней базой данных

от Сергей Дородных -

Понятно. Но Moodle, все равно должен создавать у себя в локальной базе учетную запись? Беря данные из внешней базы? Правильно? Тогда почему он не создает ее, не смотря на то, что нормально видит внешнюю базу? Может галочку где то не поставили? Есть какие нибудь мысли?

 

В ответ на Сергей Дородных

Re: Работа с внешней базой данных

от Vadim Tabunshchik -
Изображение пользователя Developers

Сергей, ошибка какая-нибудь выводится? Включите отладку на "Разработчик" и в настройках плагина "Внешняя БД" включите отладку adodb.

У меня было так, что "При тестировании, Moodle видит базу, все необходимые поля, тестирование проходит нормально", но при попытке войти выдавало ошибку о неизвестном поле. Оказалось, Moodle не понимала поле department, заполненное в настройках плагина кириллицей. Оставил пустым, всё заработало.

В ответ на Vadim Tabunshchik

Re: Работа с внешней базой данных

от Сергей Дородных -

Добрый вечер, Вадим. Очень рад вас снова услышать. Все включил, попробовал протестировать, вот что выдает:

Test authentication settings - Внешняя база данных


(mysql): SELECT * FROM b_user WHERE LOGIN <> 'random_unlikely_username'  


External table contains following columns:
ID, TIMESTAMP_X, LOGIN, PASSWORD, CHECKWORD, ACTIVE, NAME, LAST_NAME, EMAIL, LAST_LOGIN, DATE_REGISTER, LID, PERSONAL_PROFESSION, PERSONAL_WWW, PERSONAL_ICQ, PERSONAL_GENDER, PERSONAL_BIRTHDATE, PERSONAL_PHOTO, PERSONAL_PHONE, PERSONAL_FAX, PERSONAL_MOBILE, PERSONAL_PAGER, PERSONAL_STREET, PERSONAL_MAILBOX, PERSONAL_CITY, PERSONAL_STATE, PERSONAL_ZIP, PERSONAL_COUNTRY, PERSONAL_NOTES, WORK_COMPANY, WORK_DEPARTMENT, WORK_POSITION, WORK_WWW, WORK_PHONE, WORK_FAX, WORK_PAGER, WORK_STREET, WORK_MAILBOX, WORK_CITY, WORK_STATE, WORK_ZIP, WORK_COUNTRY, WORK_PROFILE, WORK_LOGO, WORK_NOTES, ADMIN_NOTES, STORED_HASH, XML_ID, PERSONAL_BIRTHDAY, EXTERNAL_AUTH_ID, CHECKWORD_TIME, SECOND_NAME, CONFIRM_CODE, LOGIN_ATTEMPTS, LAST_ACTIVITY_DATE, AUTO_TIME_ZONE, TIME_ZONE, TIME_ZONE_OFFSET
Насколько я понимаю, ошибок он не видит.
Вадим, правильно ли я понимаю, что при правильной работе этого плагина, Moodle должен самостоятельно создавать учетки у себя в локальной базе, беря информацию из внешней базы? И, при правильной настройке, будет обновлять данные этих пользователей с заданной частотой? Или он работает с внешней базой без создания учеток в своей локальной? Хотя, на на мой взгляд, это странно было бы.
В ответ на Сергей Дородных

Re: Работа с внешней базой данных

от Vadim Tabunshchik -
Изображение пользователя Developers

Moodle должен самостоятельно создавать учетки у себя в локальной базе, беря информацию из внешней базы?

Да. Все поля, указанные в настройках плагина, будут браться из внешней БД и заноситься в учетку, созданную в Moodle. Вот пример таких записей в БД Moodle:

рис

Обратите внимание: пароль не создается, он всегда будет сверяться с внешней БД.

при правильной настройке, будет обновлять данные этих пользователей с заданной частотой?

Вы сами настраиваете обновление локальной и внешней учетной записи:

рис 4

Я думаю, учетки в Битрикс обновлять нельзя, а локальные (в Moodle) можно обновлять, чтобы, допустим, отредактировать ФИО при несовпадении полей, поменять почту и т. д.

Или он работает с внешней базой без создания учеток в своей локальной?

Думаю, ответ ясен из выше сказанного: учетка в Moodle создается, в дальнейшем с внешней БД сверяется только пароль.

В ответ на Vadim Tabunshchik

Re: Работа с внешней базой данных

от Сергей Дородных -

Спасибо. Вадим. Предельно все ясно объяснили. Я так и думал. Настройки полей я сделал сразу. Я так и понял что они предназначены именно для определения периода обновления. И в этом списке определены поля в учетке, которые копируются в Moodle из внешней БД.

Но, все равно, почему то Мудл не создает своей локальной учетки из внешней БД. В Битриксе они появляются, а в Moodle нет. Непонятно. Похоже без хирургии не обойтись.

Я вам там на почту отправил пару писем, посмотрите пожалуйста на досуге. У вас почта старая осталась?

В ответ на Сергей Дородных

Re: Работа с внешней базой данных

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Чтобы выполнять синхронизацию с заданной частотой, необходимо с нужной частотой (по cron) запускать скрипт auth\db\cli\sync_users.php. Если его не запускать, то синхронизация конкретного пользователя будет выолняться при его входе в систему

В ответ на Vadim Dvorovenko

Re: Работа с внешней базой данных

от Сергей Дородных -

Вадим.

Насколько я понимаю, для того чтобы Moodle мог что то обновить: по расписанию, или без, нужно чтобы он хотя бы учетки у себя создал, в локальной БД, при регистрации человека во внешней БД. А он этого делать не хочет. А пользователя, который зарегистрировался во внешней базе Moodle, соответственно к себе не пускает, так как у него учетки этого человека просто нет. Он его даже идентифицировать не может, не говоря о том чтобы обновить его учетку. Ему и пароль то сравнивать не с чем, получается. Он не понимает, кто к нему зашел.

В ответ на Сергей Дородных

Re: Работа с внешней базой данных

от Vadim Tabunshchik -
Изображение пользователя Developers

Вадим Дворовенко тут уже писал про модернизацию плагина auth/db.

Из своего опыта по использованию этого плагина я понял, что Moodle может работать с внешними БД, где пароль просто хешируется одним из способов - или md5, или sha1. Проще говоря, подключиться к БД можно, пароль "вытянуть" нельзя, если во внешней БД используется "соление", "перчение" и т. д. улыбаюсь

Пример: я подключаюсь к БД старенькой версии Joomla, где пароль просто хешируется md5($password) - плагин работает. В случае с Битрикс - плагин не работает, так как там используется "соление" и в "мудреном" виде:

salt = randString(8);
$arFields["PASSWORD"] = $salt.md5($salt.$arFields["PASSWORD"]);

Соль - случайный набор из 8-ми символов, кот. приставлен к паролю в начале, потом это хешируется и соль снова вставляется в начало хеша. Такую «кашу» плагин Moodle auth/db разобрать не может.

Выход: попробовать использовать в настройках плагина тип пароля "Внутренний", для чего нужно периодически кроном запускать скрипты admin/cron.php (а лучше -  admin/cli/cron.php) и auth/db/cli/sync_users.php, в результате чего учетные записи из внешней БД будут синхронизированы (перенесены/скопированы) в БД Moodle.

Как это работает, и работает ли вообще, проверить негде грущу