哇,这么多复杂/令人困惑的答案。
这是从v3.4开始的。
简短的回答。
Start MongoDB without access control (/data/db or where your db is).
mongod --dbpath /data/db
Connect to the instance.
mongo
Create the user.
use some_db
db.createUser(
{
user: "myNormalUser",
pwd: "xyz123",
roles: [ { role: "readWrite", db: "some_db" },
{ role: "read", db: "some_other_db" } ]
}
)
Stop the MongoDB instance and start it again with access control.
mongod --auth --dbpath /data/db
Connect and authenticate as the user.
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
连接到实例。
蒙戈
创建administrator用户。下面将在admin身份验证数据库中创建一个administrator用户。该用户是some_db数据库上的dbOwner,而不是admin数据库上的dbOwner,记住这一点很重要。
使用管理
db.createUser (
{
用户:“myDbOwner”,
pwd:“abc123”,
角色:[{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认证数据库中不存在该用户。
使用管理
db。身份验证(“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身份验证数据库中创建。
使用some_db
db.createUser (
{
用户:“myNormalUser”,
pwd:“xyz123”,
角色:[{role: "readWrite", db: "some_db"},
{role: "read", db: "some_other_db"}]
}
)
退出mongo shell,重新连接,作为用户进行身份验证。
使用some_db
db。身份验证(“myNormalUser”、“xyz123”)
db.foo.insert ({x: 1})
使用some_other_db
db.foo.find ({})
最后但并非最不重要的是由于用户没有正确阅读我发布的关于——auth标志的命令,如果您不希望将其设置为标志,您可以在mongoDB的配置文件中设置此值。