Jenkins服务器执行mongodump命令出现SASL认证错误如何解决?
问题原因
该报错的核心诱因分为两类:
- 最常见原因:MongoDB服务端版本和Jenkins服务器上的
mongodump工具版本不兼容。通常出现在服务端版本≤4.2、客户端(mongodump所属的mongodb-database-tools包)版本≥5.0的场景下,高版本客户端默认使用的SASL认证交互字段结构,无法被低版本服务端识别,最终抛出字段未知错误。 - 次要原因:用户权限与认证数据库配置错误。
userAdminAnyDatabase是全局管理员角色,必须在admin库下创建并授予,你当前创建用户时指定的角色所属库、mongodump指定的认证库均为自定义的db_name,不符合角色要求,也会触发认证类异常;同时userAdminAnyDatabase只有用户管理权限,没有数据读取权限,就算认证通过也无法完成备份操作。
解决方案
方案1:版本适配(优先推荐)
先核对两端版本,保证大版本一致即可解决兼容问题:
- 登录MongoDB服务端执行
db.version()获取服务端版本 - 在Jenkins服务器执行
mongodump --version获取工具版本 - 卸载Jenkins服务器上不匹配的mongodb工具包,安装和服务端大版本一致的版本即可,Ubuntu 20环境可通过apt指定版本安装,也可直接下载MongoDB官方归档的对应版本二进制包直接使用。
方案2:显式指定认证机制(临时兼容)
如果暂时无法调整版本,可以在mongodump命令中强制指定旧版认证机制兼容低版本服务端:
mongodump --host=private_ip_of_mongo_server --port=27017 --authenticationDatabase="db_name" --authenticationMechanism SCRAM-SHA-1 -u="abc" -p="password"
方案3:修正用户权限与认证库配置
如果是权限配置错误,按以下步骤调整:
- 登录MongoDB服务端,切换到
admin库重新创建用户,同时追加备份所需的数据库读权限:
use admin db.createUser( { user: "abc", pwd: "password", roles:[{role: "userAdminAnyDatabase" , db:"admin"}, {role: "read", db:"db_name"}]})
- 调整mongodump命令的认证库为
admin:
mongodump --host=private_ip_of_mongo_server --port=27017 --authenticationDatabase="admin" -u="abc" -p="password"
内容的提问来源于stack exchange,提问作者Naman Jain
相关产品推荐
相关产品推荐

