MongoDB インスタンスにユーザー名とパスワードの認証を設定して、リモート アクセスでユーザー名とパスワードの入力を要求されるようにしたいです。MongoDB サイトのチュートリアルを試して、次の操作を実行しました。
use admin
db.addUser('theadmin', '12345');
db.auth('theadmin','12345');
その後、終了して mongo を再度実行しました。アクセスするのにパスワードは必要ありません。リモートでデータベースに接続しても、ユーザー名とパスワードの入力を求められません。
更新:最終的に私が使用した解決策は次のとおりです
1) At the mongo command line, set the administrator:
use admin;
db.addUser('admin','123456');
2) Shutdown the server and exit
db.shutdownServer();
exit
3) Restart mongod with --auth
$ sudo ./mongodb/bin/mongod --auth --dbpath /mnt/db/
4) Run mongo again in 2 ways:
i) run mongo first then login:
$ ./mongodb/bin/mongo localhost:27017
use admin
db.auth('admin','123456');
ii) run & login to mongo in command line.
$ ./mongodb/bin/mongo localhost:27017/admin -u admin -p 123456
mongodump
ユーザー名とパスワードは、 とで同じように機能しますmongoexport
。
ベストアンサー1
わあ、ここには複雑でわかりにくい答えがたくさんありますね。
これはv3.4時点のものです。
短い答え。
アクセス制御なしで MongoDB を起動します (
/data/db
または、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
認証データベースにユーザー管理者を作成します。ユーザーはデータベースの管理者であり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" } ]
}
)
MongoDB インスタンスを停止し、アクセス制御を使用して再起動します。
mongod --auth --dbpath /data/db
認証
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/
ユーザー管理者ではなく、通常のユーザーである追加ユーザーを作成したい場合は、以下を読み続けてください。
通常のユーザーを作成します。このユーザーは、下の認証データベースに作成されます。
some_db
use some_db db.createUser( { user: "myNormalUser", pwd: "xyz123", roles: [ { role: "readWrite", db: "some_db" }, { role: "read", db: "some_other_db" } ] } )
mongo シェルを終了し、再接続して、ユーザーとして認証します。
use some_db db.auth("myNormalUser", "xyz123") db.foo.insert({x:1}) use some_other_db db.foo.find({})
最後になりましたが、--auth
フラグに関して私が投稿したコマンドをユーザーが正しく読んでいないため、フラグとして設定したくない場合は、mongoDB の構成ファイルでこの値を設定できます。