You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java应用通过Keytab认证连接MemSQL集群的实现方法咨询

Java应用通过Keytab连接MemSQL集群实现步骤

一、前提确认

  • 已持有系统用户对应的Keytab文件,且该文件关联的Kerberos主体(Principal)具备访问MemSQL集群的权限
  • MemSQL集群版本需支持Kerberos认证(推荐6.7及以上版本)
  • Java应用所在服务器已配置Kerberos客户端(krb5.conf文件参数正确)

二、MemSQL端配置

1. 启用Kerberos认证

在集群所有节点的memsql.cnf配置文件中添加/修改以下参数:

# 开启Kerberos认证模式
authentication_method = kerberos
# 指定MemSQL的Kerberos服务主体(格式:memsql/<节点域名>@KERBEROS_REALM)
kerberos_service_principal = memsql/memsql-node.example.com@EXAMPLE.COM
# 指定MemSQL使用的Keytab路径(确保MemSQL进程有读取权限)
kerberos_keytab_file = /opt/memsql/memsql.keytab

2. 重启MemSQL服务

执行命令重启所有节点的MemSQL进程:

memsql-ops memsql-restart --all

3. 创建关联Kerberos主体的MemSQL用户

登录MemSQL集群,创建对应Kerberos主体的用户并授予权限:

CREATE USER 'memsql/memsql-node.example.com@EXAMPLE.COM' IDENTIFIED WITH kerberos;
-- 按需授予数据库操作权限
GRANT SELECT, INSERT, UPDATE ON your_target_db.* TO 'memsql/memsql-node.example.com@EXAMPLE.COM';

三、Java应用端配置

1. 配置Kerberos客户端文件

确保krb5.conf文件正确配置Kerberos Realm、KDC地址等核心参数,示例:

[libdefaults]
    default_realm = EXAMPLE.COM
    dns_lookup_kdc = true
    dns_lookup_realm = true

[realms]
    EXAMPLE.COM = {
        kdc = kdc.example.com
        admin_server = kdc.example.com
    }

[domain_realm]
    .example.com = EXAMPLE.COM
    example.com = EXAMPLE.COM

2. 配置JAAS认证文件

创建jaas.conf文件,指定系统用户的Keytab路径和Kerberos主体:

Client {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    keyTab="/path/to/system-user.keytab"
    principal="system-user@EXAMPLE.COM"
    storeKey=true
    useTicketCache=false;
};

3. 配置JDBC连接

使用支持Kerberos的MemSQL JDBC驱动(兼容MariaDB驱动),通过系统属性指定配置文件,构造连接URL:

// 设置Kerberos相关系统属性
System.setProperty("java.security.krb5.conf", "/etc/krb5.conf");
System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
System.setProperty("java.security.auth.login.config", "/opt/app/jaas.conf");

// 构造MemSQL JDBC连接URL
String url = "jdbc:mariadb://memsql-cluster-entry:3306/your_target_db?kerberosAuth=true&kerberosServiceName=memsql";

// 获取数据库连接
Connection conn = DriverManager.getConnection(url);

四、连接测试

编写简单代码验证连接有效性:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class MemSQLKerberosTest {
    public static void main(String[] args) {
        try {
            // 加载Kerberos配置
            System.setProperty("java.security.krb5.conf", "/etc/krb5.conf");
            System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
            System.setProperty("java.security.auth.login.config", "/opt/app/jaas.conf");
            
            String url = "jdbc:mariadb://memsql-node-1:3306/test_db?kerberosAuth=true&kerberosServiceName=memsql";
            Connection conn = DriverManager.getConnection(url);
            
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT 1");
            if (rs.next()) {
                System.out.println("连接成功,测试查询结果:" + rs.getInt(1));
            }
            
            // 释放资源
            rs.close();
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

内容的提问来源于stack exchange,提问作者sandipkbhaumik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 15:55:33