我有一个(旧的)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”字段的顺序是什么?我在哪里可以找到有关此信息的信息?在代码中也许?
请注意你们中有抱负的黑客:我确实使用随机字符生成器更改了值;)
答案 0 :(得分:2)
我使用选项
配置了ejabberd 18.03auth_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);