Ejabberd: перенос таблицы паролей Mnesia в пользовательскую таблицу MySQL

У меня есть (старый) экземпляр ejabberd, который все еще использует «внутренний» метод аутентификации. Я установил новый блестящий сервер (включая MySQL) и планирую перейти на него как можно скорее. С тех пор я хотел бы избежать использования Mnesia в качестве базы данных аутентификации.

Поскольку пароли моих пользователей все еще хранятся в базе данных Mnesia, мне нужно импортировать их в (новую) базу данных MySQL на новом сервере. Мне удалось сбросить таблицу «passwd», и она заполнена такими записями:

{passwd,{‹‹"flowie">>,‹‹"server.com">>},

{скрам,‹‹"pHHeHwc5yaarPAshse7Ijuygtre=">>,

      <<"4Qiv9ygiMLlzeZXUG6Bpyhygtgr=">>,

      <<"dylctQFXYGXemMii1Pswe==">>,4096}}

Чтобы иметь возможность правильно импортировать эти записи в базу данных MySQL, мне нужно выяснить, какое поле соответствует какому в таблице пользователей MySQL:

+----------------+--------------+------+-----+-------------------+-------+
| Field          | Type         | Null | Key | Default           | Extra |
+----------------+--------------+------+-----+-------------------+-------+
| username       | varchar(191) | NO   | PRI | NULL              |       |
| password       | text         | NO   |     | NULL              |       |
| serverkey      | varchar(64)  | NO   |     |                   |       |
| salt           | varchar(64)  | NO   |     |                   |       |
| iterationcount | int(11)      | NO   |     | 0                 |       |
| created_at     | timestamp    | NO   |     | CURRENT_TIMESTAMP |       |
+----------------+--------------+------+-----+-------------------+-------+
6 rows in set (0.00 sec)

Я, очевидно, знаю, что такое поле «имя пользователя» (и я думаю, что могу догадаться, каким будет «счетчик итераций»), но я хочу убедиться, что остальные указаны в правильном порядке.

Одной фразой: в каком порядке поля "пароль", "ключ сервера" и "соль" хранятся в базе данных ejabberd Mnesia ? Где я могу найти информацию об этом? В коде наверное?

Примечание для начинающих хакеров: я изменил значения с помощью генератора случайных символов ;)


person Flowie85    schedule 03.04.2018    source источник


Ответы (1)


Я настроил ejabberd 18.03 с опцией

auth_password_format: scram

и создал учетную запись. Информация об аутентификации хранится в Mnesia следующим образом:

{passwd,{<<"user1">>,<<"localhost">>},
    {scram,<<"Eu9adR8M5NPIBoVKK917UKJQTtE=">>,
           <<"0mRs0DKWvb8C0/fcVmTRP2elKOA=">>,
           <<"UclT113AyXYlUAZgv3q0vA==">>,4096}}

Позже я экспортировал Mnesia в файл SQL с помощью команды:

ejabberdctl export2sql localhost /tmp/localhost.sql

и полученный файл содержит эту строку:

INSERT INTO users(username, password, serverkey, salt, iterationcount)
VALUES ('user1',
        'Eu9adR8M5NPIBoVKK917UKJQTtE=',
        '0mRs0DKWvb8C0/fcVmTRP2elKOA=',
        'UclT113AyXYlUAZgv3q0vA==', 4096);
person Badlop    schedule 03.04.2018
comment
Спасибо Бадлоп! Глупо с моей стороны не подумать об этом простом трюке, чтобы понять это. - person Flowie85; 05.04.2018