哇,这里有这么多复杂/令人困惑的答案。
从v3.4开始。
简短的答案。
1)在没有访问控制的情况下启动MongoDB。
mongod --dbpath /data/db
2)连接到实例。
mongo
3)创建用户。
use some_db
db.createUser(
{
user: "myNormalUser",
pwd: "xyz123",
roles: [ { role: "readWrite", db: "some_db" },
{ role: "read", db: "some_other_db" } ]
}
)
4)停止MongoDB实例,然后使用访问控制重新启动它。
mongod --auth --dbpath /data/db
5)以用户身份连接并进行身份验证。
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/
1)在没有访问控制的情况下启动MongoDB。
mongod --dbpath /data/db
2)连接到实例。
mongo
3)创建用户管理员。下面在admin
身份验证数据库中创建一个用户管理员。用户是数据库管理员dbOwner
,some_db
而不是数据库管理员admin
,记住这一点很重要。
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" } ]
}
)
4)停止MongoDB实例,然后使用访问控制重新启动它。
mongod --auth --dbpath /data/db
5)以用户管理员身份连接并认证admin
数据库,而不是some_db
认证数据库。用户管理员是在admin
身份验证数据库中创建的,该用户不存在于some_db
身份验证数据库中。
use admin
db.auth("myDbOwner", "abc123")
现在,您已dbOwner
通过some_db
数据库身份验证。因此,现在,如果您希望直接对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/
如果您希望增加不是用户管理员的普通用户,请继续阅读下面的内容。
6)创建一个普通用户。该用户将在some_db
下面的身份验证数据库中创建。
use some_db
db.createUser(
{
user: "myNormalUser",
pwd: "xyz123",
roles: [ { role: "readWrite", db: "some_db" },
{ role: "read", db: "some_other_db" } ]
}
)
7)退出mongo shell,重新连接,以用户身份验证。
use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})