我的MongoDB托管在compose.io上,名为ScroungeBA。 我尝试创建一个具有一些内置角色的用户,这些角色由纪录片仅在admin数据库中工作:
MongoDB仅在管理数据库
上提供所有其他内置角色
所以我的问题:那个admin db是关于什么的?它是始终存在的标准数据库吗?
此外我遇到麻烦(使用MongoDB shell版本:3.0.5):
$ use admin
switched to db admin
$ db.auth("user", "secret")
Error: 18 Authentication failed.
我想我的用户确实存在于ScroungeBA数据库中但不存在于admin数据库中?如何在管理数据库中创建用户
db.createUser({user:"hello", pwd:"world", roles:[{role: "userAdmin", db: "admin"}]})
导致错误:
Error: couldn't add user: not authorized on admin to execute command { createUser: "hello", pwd: "xxx", roles: [ { role: "userAdmin", db: "admin" } ], digestPassword: false, writeConcern: { w: "majority", wtimeout: 30000.0 } }
at Error (<anonymous>)
at DB.createUser (src/mongo/shell/db.js:1101:11)
at (shell):1:4 at src/mongo/shell/db.js:1101
答案 0 :(得分:15)
admin数据库是您自动拥有MongoDB实例的特殊数据库。它包含数据库用户,角色,自定义数据等内容。
要在admin数据库中创建用户,您必须暂时禁用MongoDB实例上的auth。我不知道compose.io是如何具体工作的,但我通常会修改mongod.conf
文件,并对auth=true
行进行评论。
之后,您可以连接到MongoDB shell并在admin数据库中创建用户。
为用户提供userAdminAnyDatabase
角色,而不仅仅是useAdmin
。
use admin
db.createUser({ user:"admin", pwd: "pass", roles: [{role: "userAdminAnyDatabase", db: "admin"}] })
角色为userAdminAnyDatabase
的用户可以管理所有数据库的用户。
现在再次启用auth并重启服务。
正如我所说,我不确定compose.io究竟是如何运作的,以及它对你的控制程度。如果您没有管理员帐户,这应该是可行的方法。
顺便说一句,我发表了关于MongoDB 3.0 auth的an article on Medium。
答案 1 :(得分:3)
这解决了我的问题:
我终于让它在compose.io上工作了!所以这就是我的oplog网址最终看起来像: &#34; MONGO_OPLOG_URL&#34;:&#34; mongodb://用户名:password@single.18.mongolayerhost.com:1111 / local?authSource = myDB&#34;
我保持MONGO_URL与URL compose.io提供的完全相同?replicaSet
但对于OPLOG_URL,您只能使用单个主机,而不能使用多个主机。所以你必须编辑URL compose.io让你只有一个主机。并且您无法使用?replicaSet结束oplog。你只能在MONGO_URL中拥有?replicaSet。
答案 2 :(得分:2)
设置身份验证的流程:
在没有访问控制的情况下启动MongoDB。
mongod --port 27017 --dbpath / data / db1
连接到实例。
mongo-端口27017
创建用户管理员。
use admin db.createUser( { user: "myUserAdmin", pwd: "abc123", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
使用访问控制重新启动MongoDB实例。
mongod --auth --port 27017 --dbpath / data / db1
以用户管理员身份验证。
使用-u,-p和--authenticationDatabase命令行选项启动mongo shell:
mongo --port 27017 -u“ myUserAdmin” -p“ abc123” --authentication数据库“管理员”
具有角色 userAdminAnyDatabase 的用户可以管理所有数据库的用户。
对于常规用户创建,您必须拥有以下权限:
To create a new user in a database, you must have the createUser action on that database resource.
To grant roles to a user, you must have the grantRole action on the role’s database.
MongoDB将所有用户信息(包括名称,密码和用户的身份验证数据库)存储在admin数据库的system.users集合中。
更多详细信息:https://docs.mongodb.com/manual/tutorial/enable-authentication/
答案 3 :(得分:0)
您可以尝试以下方法:
use admin
db.createUser( { user: "kaka", pwd: "hamedkke", roles: [
"readWriteAnyDatabase","dbAdminAnyDatabase","clusterAdmin" ] } )