Ejabberd:将Mnesia“passwd”表迁移到MySQL“user”表

时间:2018-04-03 17:24:01

标签: mysql ejabberd mnesia

我有一个(旧的)ejabberd实例仍然使用'internal'作为身份验证方法。我安装了一个闪亮的新服务器(包括MySQL),并计划尽快迁移到它。我想从那时起避免使用Mnesia作为身份验证DB。

由于我的用户密码仍然存储在Mnesia数据库中,我需要将它们导入到新服务器上的(新)MySQL数据库中。我成功地转储了'passwd'表,并且填充了类似这样的条目:

  

{passwd中,{<< “flowie” >>,<< “server.com” >>},

     

{急停,<< “pHHeHwc5yaarPAshse7Ijuygtre =” >>,

      <<"4Qiv9ygiMLlzeZXUG6Bpyhygtgr=">>,

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

为了能够将这些条目正确导入MySQL DB,我需要确定哪个字段对应于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)

我显然知道“用户名”字段是什么(我想我可以猜出'iterationcount'会是什么),但我想确保以正确的顺序获得其他人。

在一个短语中:ejabberd Mnesia数据库中存储的“密码”,“serverkey”和“salt”字段的顺序是什么?我在哪里可以找到有关此信息的信息?在代码中也许?

请注意你们中有抱负的黑客:我确实使用随机字符生成器更改了值;)

1 个答案:

答案 0 :(得分:2)

我使用选项

配置了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);