哇,这里有很多复杂/令人困惑的答案。
这是截至v3.4的情况。
简短回答。
在没有访问控制的情况下启动MongoDB(/data/db
或您的数据库所在位置)。
mongod --dbpath /data/db
连接到实例。
mongo
创建用户。
use some_db
db.createUser(
{
user: "myNormalUser",
pwd: "xyz123",
roles: [ { role: "readWrite", db: "some_db" },
{ role: "read", db: "some_other_db" } ]
}
)
停止 MongoDB 实例并使用访问控制重新启动它。
mongod --auth --dbpath /data/db
连接并以用户身份进行认证。
use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})
长篇回答:如果您想彻底理解,请阅读以下内容。
这很简单。 我会简化下面的内容 https://docs.mongodb.com/manual/tutorial/enable-authentication/
如果您想了解角色实际上是做什么的,请在此处阅读更多信息:https://docs.mongodb.com/manual/reference/built-in-roles/
启动没有访问控制的MongoDB。
mongod --dbpath /data/db
连接到实例。
mongo
创建用户管理员。 以下操作在admin
认证数据库中创建用户管理员。用户是some_db
数据库的dbOwner
,但不是admin
数据库的dbOwner
,这一点很重要。
use admin
db.createUser(
{
user: "myDbOwner",
pwd: "abc123",
roles: [ { role: "dbOwner", db: "some_db" } ]
}
)
或者,如果您想创建一个对任何数据库都具有管理员权限的管理员:
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
停止MongoDB实例并使用访问控制重新启动它。
mongod --auth --dbpath /data/db
连接并身份验证为用户管理员,面向admin
认证数据库,而不是some_db
认证数据库。用户管理员是在admin
认证数据库中创建的,该用户不存在于some_db
认证数据库中。
use admin
db.auth("myDbOwner", "abc123")
你现在已经通过数据库 some_db
成为了一个 dbOwner
用户。如果你想直接读写操作 some_db
,你需要先切换到该数据库。
use some_db
//...do stuff like db.foo.insert({x:1})
// remember that the user administrator had dbOwner rights so the user may write/read, if you create a user with userAdmin they will not be able to read/write for example.
有关角色的更多信息:https://docs.mongodb.com/manual/reference/built-in-roles/
如果您希望创建额外的用户,这些用户不是用户管理员,只是普通用户,请继续阅读以下内容。
创建一个普通用户。该用户将在下面的some_db
身份验证数据库中创建。
use some_db
db.createUser(
{
user: "myNormalUser",
pwd: "xyz123",
roles: [ { role: "readWrite", db: "some_db" },
{ role: "read", db: "some_other_db" } ]
}
)
退出Mongo shell,重新连接并以用户身份进行验证。
use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})
最后但并非不重要的是,由于用户未正确阅读我发布的有关 --auth
标志的命令,如果您不想将它设置为标志,则可以在mongoDB的配置文件中设置此值。
service mongod restart
而不是./mongodb/bin/mongod
。 - user124384