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

从OpenShift(RHEL 7.9)配置Debezium SQL Server连接器(Windows服务账户)失败

解决Debezium SQL Server连接器使用Windows域服务账户登录失败的问题

你遇到的Login Failed for User 'serviceaccount@domain.com'错误,是因为默认配置下Debezium使用SQL Server身份认证,而你用的是Windows域服务账户,需要切换到Windows身份认证或Kerberos认证模式。以下是针对Debezium 1.9.6版本的具体配置方案:

方案一:使用Windows身份认证(Debezium运行在Windows环境)

如果Debezium部署在Windows服务器上,可直接借助系统的Windows身份认证能力:

  • 移除配置中的database.user和database.password参数,添加database.url指定集成认证的JDBC连接串:
    {
        "name": "inventory-connector", 
        "config": {
            "connector.class": "io.debezium.connector.sqlserver.SqlServerConnector", 
            "database.hostname": "192.168.99.100", 
            "database.port": "1433", 
            "database.dbname": "testDB", 
            "database.server.name": "fullfillment", 
            "table.include.list": "dbo.customers", 
            "database.history.kafka.bootstrap.servers": "kafka:9092", 
            "database.history.kafka.topic": "dbhistory.fullfillment",
            "database.url": "jdbc:sqlserver://192.168.99.100:1433;databaseName=testDB;integratedSecurity=true;"
        }
    }
    
  • 将Microsoft JDBC驱动中的sqljdbc_auth.dll文件(对应系统位数,x86/x64)放到JVM的bin目录,或添加到系统PATH环境变量中。
  • 确保启动Debezium的Windows进程使用的是该域服务账户,或已通过系统登录该账户。

方案二:使用Kerberos认证(跨平台/域环境推荐)

如果Debezium运行在Linux等非Windows环境,或需要跨平台域认证,推荐配置Kerberos:

  1. 准备Kerberos资源

    • 为serviceaccount@domain.com生成keytab文件,确保该账户拥有SQL Server的登录权限,以及目标数据库的CDC操作权限(如db_owner或专门的CDC角色)。
    • 配置krb5.conf文件,指定域的KDC信息:
      [libdefaults]
          default_realm = DOMAIN.COM
          dns_lookup_kdc = true
      [realms]
          DOMAIN.COM = {
              kdc = dc.domain.com
              admin_server = dc.domain.com
          }
      
  2. 配置Debezium JVM参数
    在启动Debezium时添加以下JVM参数,指定Kerberos配置:

    -Djava.security.krb5.conf=/path/to/krb5.conf
    -Djavax.security.auth.useSubjectCredsOnly=false
    

    如果使用Docker,需将krb5.conf和keytab文件挂载到容器内,并在启动命令中加入上述参数。

  3. 修改连接器配置
    移除database.password,添加Kerberos相关的JDBC连接配置:

    {
        "name": "inventory-connector", 
        "config": {
            "connector.class": "io.debezium.connector.sqlserver.SqlServerConnector", 
            "database.hostname": "192.168.99.100", 
            "database.port": "1433", 
            "database.user": "SERVICEACCOUNT@DOMAIN.COM", 
            "database.dbname": "testDB", 
            "database.server.name": "fullfillment", 
            "table.include.list": "dbo.customers", 
            "database.history.kafka.bootstrap.servers": "kafka:9092", 
            "database.history.kafka.topic": "dbhistory.fullfillment",
            "database.url": "jdbc:sqlserver://192.168.99.100:1433;databaseName=testDB;authenticationScheme=JavaKerberos;",
            "database.driver": "com.microsoft.sqlserver.jdbc.SQLServerDriver"
        }
    }
    

    注意:database.user需使用大写的域名格式(如SERVICEACCOUNT@DOMAIN.COM)。

  4. 验证Kerberos票据
    提前用kinit命令验证keytab有效性:

    kinit -kt /path/to/serviceaccount.keytab SERVICEACCOUNT@DOMAIN.COM
    

通用注意事项

  • 确认服务账户对目标数据库的CDC系统表(如cdc.*)有读取权限。
  • Debezium 1.9.x需搭配Microsoft JDBC Driver 6.4及以上版本,确保Kerberos和集成认证功能正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:17:42