Skip to content

使用内置数据库进行密码认证

EMQX 通过内置数据库为用户提供了一种低成本、开箱即用的密码认证方式。启用后,EMQX 会将内置的 Mnesia 数据库存储客户端身份凭据,并通过 REST API 与 Dashboard 进行数据管理,本节将向您介绍如何通过 Dashboard 或配置项进行相关配置。

前置准备

熟悉 EMQX 认证基本概念

通过 Dashboard 配置

您可以使用 Dashboard 来创建通过内置数据库进行密码认证。

  1. EMQX Dashboard 页面,点击左侧导航栏的访问控制 -> 认证
  2. 认证页面,点击创建
  3. 依次选择认证方式Password-Based数据源内置数据库,进入配置参数页签:
EMQX 内置数据库认证
  1. 按照以下说明配置数据源:

    • 账号类型:指定用于客户端身份 ID 认证的字段,可选值: usernameclientid(分别对应于 MQTT 客户端 CONNECT 报文中的 UsernameClient Identifier 字段)。

    • 密码加密方式:选择应用于明文密码的哈希算法,用于在将结果存储到数据库之前对密码进行加密。可用选项包括 plainmd5shasha256sha512bcryptpbkdf2。具体配置取决于所选择的算法:

      • 选择 md5shasha256sha512 算法,需配置:

        • 加盐方式:用于指定盐和密码的组合方式,除需将访问凭据从外部存储迁移到 EMQX 内置数据库中外,一般不需要更改此选项;可选值:suffix(在密码尾部加盐)、prefix(在密码头部加盐)、disable(不启用)。如果无需从外部存储迁移客户端身份凭据到 EMQX 内置数据库,可以保持默认值。
        • 生成的哈希以十六进制字符串形式表示,并与存储的凭据进行不区分大小写的比对。
      • 选择 plain

        • 加盐方式:应设置为 disable
      • 选择 bcrypt 算法,需配置:

        • Salt Rounds:指定散列需要的计算次数(2^Salt Rounds),也称成本因子。默认值:10,可选值:510;数值越高,加密的安全性越高,因此建议采用较大的值,但相应的用户验证的耗时也会增加,您可根据业务需求进行配置。
      • 选择 pbkdf2 算法,需配置:

        • 伪随机函数:指定生成密钥使用的散列函数,如 sha256 等。
        • 迭代次数:指定散列次数,默认值:4096
        • 密钥长度(可选):指定希望得到的密钥长度。如不指定,密钥长度将由伪随机函数确定。
        • 生成的哈希以十六进制字符串形式表示,并与存储的凭据进行不区分大小写的比对。
    • 调用条件:一个 Variform 表达式,用于控制是否将此内置数据库认证器应用于客户端连接。该表达式会根据客户端的属性(例如 usernameclientidlistener 等)进行评估。如果表达式的结果为字符串 "true",则会触发认证器。否则,认证器将被跳过。有关调用条件的更多信息,请参见认证器调用条件

  2. 完成以上设置后,点击创建,EMQX 将按照设定通过内置数据库进行密码认证。

通过配置文件配置

此外,您可以通过配置项完成相关配置。

示例配置:

hcl
{
   backend = "built_in_database"
   mechanism = "password_based"
   password_hash_algorithm {
      name = "sha256",
      salt_position = "suffix"
   }
   user_id_type = "username"
}

迁移到内置数据库

如你希望将其他数据库中存储的认证凭据迁移到 EMQX 内置数据库,可通过 csv 或 json 文件将其批量导入。更多信息,可阅读导入用户