项目最近用到了 mongo 分库分表,之前的 mongo 连接是由 spring 管理的,分表后在代码中重新用了一个连接,发布的时候老是会报 Authorization failed,开始发现是新库没有用户,于是乎新建了一个用户,在 Studio 3T 上是可以连接上的,但是在代码中一直报异常,想问下有没有对 mongo 比较熟悉的大佬帮忙看看

1 JCZ2MkKb5S8ZX9pq Apr 1, 2019 我自己用的一个库,一开始 admin 的确也有问题,建个 root 就 ok 了,还没试过太细的管理。 |
2 lincanbin Apr 1, 2019 via Android 连接字少了一些 options 吧 |
3 yuikns Apr 1, 2019 没用过 spring 连 mongo。 Authorization failed 常见的问题是数据库的用户对不上。要是你的数据库用户来自 admin, 那么你可以设置一下 authdb. 否则可以先 admin 登录,然后 use new_db; db.createUser({"user":"your_username","pwd":"your_password","roles":["root","dbAdmin","dbOwner"]}); 另外一个需要考虑的是 mechanism。scram-sha-1/mongodb-cr 需要匹配才行。很多 driver 貌似是要手动设置的。 |
6 yuikns Apr 1, 2019 via iPad 通常情况下,每个数据库定义一组独立的用户是出于安全考虑。但是你也可以在某个数据库下创建一个跨数据库的用户。这个只要定义好 role 字段即可。 我查了下 mongodb 中 Spring 相关的问答 https://stackoverflow.com/questions/46934427/connect-to-multiple-mongo-db-hosts-and-authenticate-using-a-different-database-i 貌似那个字段叫人 source。就是你如果在 admin 中有个可以高权限的用户,那么你可以设置 source 为 admin,user/pass 就是 admin 的那套。但是 /database 用你需要用的那个就行 |
7 ohyeahhh OP @yuikns 对对对,你说的每个点都戳中了要害,今天查看日志的时候也发现了那个 source 好像有问题,在这码字可能一时半会儿说不清,我的 QQ 是 1439581267,如果方便的话麻烦加我一下,我跟您说清楚一点,好好请教一番,谢谢啦;也是刚入 mongo 不久,项目主城刚走,这块儿还不太熟悉 |
8 yuikns Apr 2, 2019 @ohyeahhh 抱歉基本不上 qq。 连接和用户什么,可以试试多看看官方文档。https://docs.mongodb.com/manual/reference/method/js-user-management/ 右侧的 GUI 工具 robomongo 也是极好的。 |