我从2.4升级到2.6并且身份验证失败了。 This tutorial似乎很简单,但我一直被锁在自己的数据库之外。我的情况很简单,我有一个Mongo服务器,需要一个用户/密码组合来连接。
首先,我通过提到的localhost异常进行连接。然后我按照建议创建管理员用户:
use admin
db.createUser(
{
user: "myadmin",
pwd: "mysecret",
roles:
[
{
role: "userAdminAnyDatabase",
db: "admin"
}
]
}
)
现在是时候添加新用户了所以要理智地检查自己,我注销了shell。现在当我输入" mongo"它失败。以前工作但是没问题,它没有看到用户名密码,我想本地主机例外不再存在,所以我按照here概述的说明进行操作:
mongo --port 27017 -u myadmin -p mysecret --authenticationDatabase admin
我得到了:
MongoDB shell version: 2.6.0
connecting to: 127.0.0.1:27017/test
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }
>
关于如何:
的任何想法设置Mongo 2.6,这样我就可以轻松进出管理数据库的shell(我认为这是"系统用户管理员")
从远程客户端启用用户连接? (只是mongo方面,iptables无需帮助......)
谢谢!
答案 0 :(得分:31)
显然“系统用户管理员”还不够。创建root用户:
> db.createUser({user:"someadmin",pwd:"secret", roles:[{role:"root",db:"admin"}]})
然后添加您的数据库用户:
> use some_db
> db.createUser(
{
user: "mongouser",
pwd: "someothersecret",
roles: ["readWrite"]
}
)
有关this gist的更多详情。评论关于SO欢迎的要点和更好的答案 - 我不是一个系统管理员
答案 1 :(得分:1)
1)您分配admin user-userAdminAnyDatabase的角色没有无限制的权限。它只是一个允许在任何数据库上创建和管理用户的角色。显然,默认情况下,它不能执行与管理数据库用户不直接相关的某些命令(例如从日志中获取启动警告,查询服务器状态等)。
您可以使用'root'角色代替Tony建议。如果您打算使用root帐户进行设置和管理,然后只需要几个基本的读/写特权帐户与数据库通信,这可能是最有意义的。
2)通常,在客户端连接只需要在从客户端代码连接后调用db.authenticate()函数。根据您为客户端使用的驱动程序/语言,有不同的方法可以执行此操作。 node.js驱动程序代码非常典型:http://mongodb.github.io/node-mongodb-native/api-generated/db.html#authenticate
答案 2 :(得分:0)
即使遵循@ Tony的方法,我也得到了
`com.mongodb.CommandFailureException:`
添加
compile 'org.mongodb:mongo-java-driver:2.13.1'
然而,在BuildConfig.groovy的Dependency部分中,解决了这个问题。