ユーザー名とパスワードでMongoDBを保護する方法 質問する

ユーザー名とパスワードでMongoDBを保護する方法 質問する

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時点のものです。

短い答え。

  1. アクセス制御なしで MongoDB を起動します (/data/dbまたは、DB がある場所)。

    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" } ]
     }
   )
  1. MongoDB インスタンスを停止し、アクセス制御を使用して再起動します。

    mongod --auth --dbpath /data/db
    
  2. 認証adminデータベースに対してではなく、ユーザー管理者として接続して認証します。ユーザー管理者は認証データベースで作成されましたが、ユーザーは認証データベースに存在しませんsome_dbadminsome_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/

ユーザー管理者ではなく、通常のユーザーである追加ユーザーを作成したい場合は、以下を読み続けてください。

  1. 通常のユーザーを作成します。このユーザーは、下の認証データベースに作成されます。some_db

    use some_db
    db.createUser(
      {
        user: "myNormalUser",
        pwd: "xyz123",
        roles: [ { role: "readWrite", db: "some_db" },
                 { role: "read", db: "some_other_db" } ]
      }
    )
    
  2. mongo シェルを終了し、再接続して、ユーザーとして認証します。

    use some_db
    db.auth("myNormalUser", "xyz123")
    db.foo.insert({x:1})
    use some_other_db
    db.foo.find({})
    

最後になりましたが、--authフラグに関して私が投稿したコマンドをユーザーが正しく読んでいないため、フラグとして設定したくない場合は、mongoDB の構成ファイルでこの値を設定できます。

おすすめ記事