认证

配置 Kyuubi 使用 JDBC 认证

师成师成· 更新于 2026-09-29· 阅读 4 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

Kyuubi 支持通过 JDBC 查询进行认证。系统会准备好一条包含用户名/密码值的查询语句,并将其发送到 JDBC URL 中配置的数据库。如果查询结果集不为空,则认证通过。

SQL 语句必须以 SELECT 子句开头。支持使用占位符进行替换,列出如下:

  • ${user}
  • ${password}

例如,SELECT 1 FROM auth_db.auth_table WHERE user=${user} AND passwd=MD5(CONCAT(salt,${password})) 将被准备为 SELECT 1 FROM auth_db.auth_table WHERE user=? AND passwd=MD5(CONCAT(salt,?)),并对 user 和 password 以字符串类型进行值替换。

启用 JDBC 认证

要启用 JDBC 认证方式,我们需要:

  • 将 JDBC 驱动 jar 包放入 $KYUUBI_HOME/jars 目录,使其对 kyuubi 服务的 classpath 可见。
  • 在安装了 kyuubi 服务的每个节点上,将以下配置项写入 $KYUUBI_HOME/conf/kyuubi-defaults.conf。

配置认证属性

在安装了 kyuubi 服务的每个节点上,将以下配置项写入 $KYUUBI_HOME/conf/kyuubi-defaults.conf。

kyuubi.authentication=JDBC
kyuubi.authentication.jdbc.driver.class = com.mysql.jdbc.Driver
kyuubi.authentication.jdbc.url = jdbc:mysql://127.0.0.1:3306/auth_db
kyuubi.authentication.jdbc.user = bowenliang123
kyuubi.authentication.jdbc.password = bowenliang123@kyuubi
kyuubi.authentication.jdbc.query = SELECT 1 FROM auth_table WHERE user=${user} AND passwd=MD5(CONCAT(salt,${password}))

使用内存数据库进行认证

配合自动创建的内存数据库,可以使用 JDBC 认证进行令牌校验,而无需启动专门的数据库服务或配置自定义插件。

考虑针对用户名和令牌这一组合进行认证,令牌包含以 yyyyMMddHHmm 格式表示的 expire_time,以及一个由 expire_time、username 和一个密钥按顺序生成的 MD5 签名。按照下面的示例,Kyuubi Server 会自动创建一个 H2 内存数据库,并使用其系统函数 HASH 进行认证,同时使用 NOW() 检查令牌的过期时间。

kyuubi.authentication=JDBC
kyuubi.authentication.jdbc.driver.class = org.h2.Driver
kyuubi.authentication.jdbc.url = jdbc:h2:mem:
kyuubi.authentication.jdbc.user = no_user
kyuubi.authentication.jdbc.query = SELECT 1 FROM ( \
  SELECT ${user} as username, 'secret_key' as secret_key, \
  SUBSTRING(${password}, 0, 12) as expire_time, \
  SUBSTRING(${password}, 13) as signed \
  ) WHERE signed = RAWTOHEX(HASH('MD5', CONCAT(secret_key, username, expire_time))) \
  AND PARSEDATETIME(expire_time,'yyyyMMddHHmm') > NOW()

评论

登录后参与评论

正在加载评论…