MongoDB 3.4 远程连接时老是报 Authorization failed,有没有会 Mongo 的大佬进来帮忙解决一下

2019-03-31 23:49:43 +08:00
 ohyeahhh
项目最近用到了 mongo 分库分表,之前的 mongo 连接是由 spring 管理的,分表后在代码中重新用了一个连接,发布的时候老是会报 Authorization failed,开始发现是新库没有用户,于是乎新建了一个用户,在 Studio 3T 上是可以连接上的,但是在代码中一直报异常,想问下有没有对 mongo 比较熟悉的大佬帮忙看看
8415 次点击
所在节点    MongoDB
8 条回复
JCZ2MkKb5S8ZX9pq
2019-04-01 01:09:02 +08:00
我自己用的一个库,一开始 admin 的确也有问题,建个 root 就 ok 了,还没试过太细的管理。
lincanbin
2019-04-01 01:30:57 +08:00
连接字少了一些 options 吧
yuikns
2019-04-01 06:50:42 +08:00
没用过 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 貌似是要手动设置的。
ohyeahhh
2019-04-01 20:00:51 +08:00
@yuikns
大概率确实是数据库的用户对不上,但是我还有一个问题想请教一下,如果我针对不同的库使用相同的用户是否可行呢
yuikns
2019-04-01 22:49:15 +08:00
@ohyeahhh 用户名是数据库里面的。因此两个数据库使用相同用户名并不干扰
yuikns
2019-04-01 22:56:02 +08:00
通常情况下,每个数据库定义一组独立的用户是出于安全考虑。但是你也可以在某个数据库下创建一个跨数据库的用户。这个只要定义好 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 用你需要用的那个就行
ohyeahhh
2019-04-02 00:21:07 +08:00
@yuikns 对对对,你说的每个点都戳中了要害,今天查看日志的时候也发现了那个 source 好像有问题,在这码字可能一时半会儿说不清,我的 QQ 是 1439581267,如果方便的话麻烦加我一下,我跟您说清楚一点,好好请教一番,谢谢啦;也是刚入 mongo 不久,项目主城刚走,这块儿还不太熟悉
yuikns
2019-04-02 09:20:41 +08:00
@ohyeahhh 抱歉基本不上 qq。

连接和用户什么,可以试试多看看官方文档。https://docs.mongodb.com/manual/reference/method/js-user-management/

右侧的 GUI 工具 robomongo 也是极好的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/550631

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX