认证
配置 Kyuubi 使用 JDBC 认证
登录后可跨设备保存划线和私人笔记登录
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()评论
登录后参与评论
正在加载评论…
KnowForge