ここに、非常に多くの複雑で混乱を招く答えがあります。
これは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
データベースとNOT上で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シェルを終了し、再接続して、ユーザーとして認証します。
use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})