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

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

от Vadim Tabunshchik -
Количество ответов: 7
Изображение пользователя 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.

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