Liquibase连接MongoDB时是否支持Kerberos认证?
Liquibase对接MongoDB的Kerberos认证支持结论
- 明确支持:Liquibase官方MongoDB扩展从4.0版本开始就原生兼容Kerberos(GSSAPI)认证机制,不存在功能层面的限制,不需要二次修改扩展包即可实现对接。目前公开资料里Oracle相关的Kerberos配置示例更多,只是因为Oracle场景的相关文档沉淀更早,不代表MongoDB场景不支持。
可行配置实现方案
前置准备
- 执行Liquibase的主机已完成Kerberos客户端配置,krb5.conf配置正确
- 用于对接的Kerberos服务账号已被授予目标MongoDB库的对应操作权限
- 可选择提前通过
kinit命令获取有效TGT票据,或通过指定keytab文件实现免交互认证
配置方式1:通过liquibase.properties文件配置
直接在配置文件中填写带Kerberos认证参数的MongoDB连接串即可,示例配置如下:
# 连接串指定GSSAPI认证机制,服务名默认填mongodb url: mongodb://<kerberos_service_principal>@<mongodb_host1>:27017,<mongodb_host2>:27017/<target_db_name>?authMechanism=GSSAPI&authSource=$external&gssapiServiceName=mongodb username: 不需要填写,Kerberos认证主体已在连接串中指定 password: 不需要填写,认证依赖本地Kerberos票据而非明文密码 driver: com.mongodb.client.MongoClients changeLogFile: changelog.xml
如果需要指定自定义的krb5.conf路径、keytab路径,在启动Liquibase前配置对应的JVM参数即可:
export JAVA_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf -Djavax.security.auth.useSubjectCredsOnly=false" # 如果用keytab免密认证,追加以下参数 # export JAVA_OPTS="$JAVA_OPTS -Djava.security.krb5.realm=<YOUR_REALM> -Djava.security.krb5.kdc=<YOUR_KDC_ADDRESS> -Dsun.security.krb5.principal=<YOUR_SERVICE_PRINCIPAL>"
配置方式2:命令行直接传参执行
不需要写配置文件,直接在执行Liquibase命令时传入连接串参数即可,示例:
liquibase \ --url="mongodb://<kerberos_service_principal>@<mongodb_host>:27017/<target_db>?authMechanism=GSSAPI&authSource=\$external&gssapiServiceName=mongodb" \ --changeLogFile=changelog.xml \ update
注意传参时$external要做转义,避免被shell识别为环境变量。
常见注意事项
- 跨域Kerberos部署场景下,需要在连接串末尾追加参数
&authMechanismProperties=CANONICALIZE_HOST_NAME:true,避免主机名反向解析不匹配导致认证失败 - 不要尝试在连接串或配置项中填写Kerberos账号的明文密码,GSSAPI认证机制不会读取密码字段,填了反而可能触发认证逻辑异常
- 执行操作前可以先用MongoDB自带的mongo/mongosh客户端用相同Kerberos账号测试连接,排除Kerberos客户端、账号权限层面的问题,再调试Liquibase配置
内容的提问来源于stack exchange,提问作者Nikhil Sahu
相关产品推荐
相关产品推荐

