我想放入MacBook终端的mongo shell.但是,我有兴趣连接到在云中运行的Mongo实例(通过Heroku插件进行compose.io实例).我有MongoDB URI中的名称,密码,主机,端口和数据库名称:
mongodb://username:password@somewhere.mongolayer.com:10011/my_database
Run Code Online (Sandbox Code Playgroud)
我使用Homebrew在我的MacBook上安装了mongodb并不是因为我想在我的Mac上运行Mongo,而只是为了连接到这个远程数据库而访问mongo shell程序.
但是,我找不到正确的命令来获取我想要的完整shell访问权限.使用这里的说明http://docs.mongodb.org/manual/reference/program/mongo/(搜索"远程")我能够得到看似连接的东西,但没有提供我的用户名或密码我不是完全连接.运行db.auth(username, password)返回1(与我提供错误的用户名和密码时"auth failed"相反),但在发出show dbs命令时我仍然收到"未授权"错误消息.
在我的远程服务器上,我使用以以下方式启动的 docker 容器:
MONBULDING_PORT="8080" docker-compose up -d --no-deps --build monbulding-mongo
如果我不设置任何用户名/密码来进行身份验证,它效果很好。这是对应的docker-compose.yaml文件:
monbulding-mongo:
image: mongo:latest
ports:
- "27017:27017"
Run Code Online (Sandbox Code Playgroud)
现在,如果我想设置用户名/密码来访问 MongoDB,我可以将此文件更改为:
monbulding-mongo:
image: mongo:latest
ports:
- "27017:27017"
environment:
- AUTH=yes
- MONGODB_ADMIN_USER=admin
- MONGODB_ADMIN_PASS=password
- MONGODB_APPLICATION_DATABASE=app
- MONGODB_APPLICATION_USER=user
- MONGODB_APPLICATION_PASS=password
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用 登录 MongoDB Robo 3T,它不起作用:
有人知道我做错了什么吗?谢谢!
编辑:
我也尝试过mongo shell:
mongo --host domain.net -u admin -p password
但也有一个错误。
所以我尝试使用官方mongo Docker 镜像version来设置 MongoDB 4.2。
我想要实现的是使用启用了身份验证的服务器,并且我想要一个带有自定义用户和密码的自定义数据库。
因此,我设置以下环境变量:
MONGO_INITDB_DATABASE: mydb
MONGO_INITDB_ROOT_USERNAME: jane
MONGO_INITDB_ROOT_PASSWORD: secret
Run Code Online (Sandbox Code Playgroud)
在文档中,它指出如果您提供后两个环境变量,则会自动启用身份验证。
但是,当我尝试mydb使用凭据jane和访问数据库时secret,我得到的只是一个错误:
Supported SASL mechanisms requested for unknown user 'jane@mydb'
SASL SCRAM-SHA-1 authentication failed for jane on mydb from client 172.17.0.1:54702 ; UserNotFound: Could not find user "jane" for db "mydb"
Run Code Online (Sandbox Code Playgroud)
这是为什么?我缺少什么?
我的猜测是创建的用户只能访问数据库admin,我需要授予该用户jane对数据库的访问权限mydb。我尝试使用以下命令来做到这一点:
mongo admin -u jane -p secret --eval "db.grantRolesToUser('jane', [{role: 'dbOwner', db: 'mydb'}])"
Run Code Online (Sandbox Code Playgroud)
但这也不起作用。我缺少什么?
我正在使用官方的mongodb docker容器.我想从端口27017上的主机连接到mongodb容器.我运行容器,暴露了这些端口
-p 27017:27017
我无法连接(连接被拒绝),我相信它,因为mongo conf文件未配置为允许远程连接.如何配置允许?官方容器没有安装vi/nano来修改图像.
我可以通过创建链接从另一个容器连接到mongodb - 但这不是我的愿望