web-dev-qa-db-ja.com

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

私のMongoDBインスタンスにユーザー名とパスワードによる認証を設定したいのです。そうすれば、どんなリモートアクセスでもユーザー名とパスワードが要求されます。私はMongoDBサイトからチュートリアルを試してみて、以下のようにしました:

use admin
db.addUser('theadmin', '12345');
db.auth('theadmin','12345');

その後、私は出て再びモンゴを走りました。それにアクセスするためにパスワードは必要ありません。データベースにリモート接続しても、ユーザー名とパスワードの入力を求められません。


_ update _ これが私が使ったソリューションです

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

ユーザー名とパスワードはmongodumpmongoexportでも同じように機能します。

340
murvinlai

ユーザーを設定した後、--authオプションでmongodを起動する必要があります。

MongoDBサイトから:

セキュリティを有効にするには、--authオプションを指定してデータベース(mongodプロセス)を実行します。 --authでサーバーを起動する前にadmin dbにユーザーを追加するか、localhostインターフェースから最初のユーザーを追加する必要があります。

MongoDB認証

102

まず、mongod設定ファイルの#auth=trueで始まる行のコメントを外します(デフォルトパスは/etc/mongo.conf)。これでmongodbの認証が有効になります。

その後、mongodbを再起動します。Sudo service mongod restart

59
Shnkc

すごく複雑でわかりにくい答えがたくさんあります。

これは 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認証データベースにユーザー管理者を作成します。ユーザーはsome_dbデータベースに対するdbOwnerであり、adminデータベースに対するものではありません。これは覚えておくことが重要です。

use admin
db.createUser(
  {
    user: "myDbOwner",
    pwd: "abc123",
    roles: [ { role: "dbOwner", db: "some_db" } ]
  }
)

あるいは、どのデータベースに対してもadminという管理者を作成したい場合は、

use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

4)MongoDBインスタンスを停止し、アクセス制御を使用して再開します。

mongod --auth --dbpath /data/db

5)some_db認証データベースではなくadmin認証データベースに接続し、ユーザー管理者として認証します。 ユーザー管理者はadmin認証データベースに作成されました。ユーザーはsome_db認証データベースには存在しません。

use admin
db.auth("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/

あなたがユーザ管理者ではなく、単に普通のユーザである追加のユーザを作りたいのであれば、以下を続けてください。

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({})
56
Karl Morrison

この回答はMongo 3.2.1用です 参考

ターミナル1:

$ mongod --auth

ターミナル2:

db.createUser({user:"admin_name", pwd:"1234",roles:["readWrite","dbAdmin"]})

ロールなしで追加したい場合(オプション):

db.createUser({user:"admin_name", pwd:"1234", roles:[]})

認証済みかどうかを確認するには

db.auth("admin_name", "1234")

それはあなたを与えるはずです:

1

それ以外の場合

Error: Authentication failed.
0
41
Sdembla

これはユーザーを追加するためのJavaScriptコードです。

  1. mongod--auth = trueで開始します

  2. Mongo Shellから管理データベースにアクセスし、javascriptファイルを渡します。

    mongo admin "Filename.js"

    "Filename.js"

    // Adding admin user
    db.addUser("admin_username", " admin_password");
    // Authenticate admin user
    db.auth("admin_username ", " admin_password ");
    // use  database code from Java script
    db = db.getSiblingDB("newDatabase");
    // Adding newDatabase database user  
    db.addUser("database_username ", " database_ password ");
    
  3. これでユーザー追加が完了しました。mongoShellからデータベースへのアクセスを確認できます

26
Bharadvaj

https://docs.mongodb.com/manual/reference/configuration-options/#security.authorization

モンゴ設定ファイルを編集します。

Sudo nano /etc/mongod.conf

次の行を追加してください。

security.authorization : enabled

サービスを再開する

Sudo service mongod restart

よろしく

11
alicanozkara

まずターミナルを使ってmongoDBを実行します。

mongod

mongo Shellを実行して、次のコマンドを使用します。

    use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

アクセス制御を使用してMongoDBインスタンスを再起動します。

mongod --auth

今すぐコマンドラインから自分自身を使用して認証します

mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"

から読みました

https://docs.mongodb.com/manual/tutorial/enable-authentication/ /

7
PRAVESH kumar

データベースアクセスを保護するための特定のデータベース用のパスワードを使用したユーザー作成:

use dbName

db.createUser(
   {
     user: "dbUser",
     pwd: "dbPassword",
     roles: [ "readWrite", "dbAdmin" ]
   }
)
3
Hasib Kamal

あなたはあなたが(adminデータベースではなく)あなたが利用したいデータベースに切り替える必要があるでしょう...

use mydatabase

詳細については、この記事を参照してください... https://web.archive.org/web/20140316031938/http://learnmongo.com/posts/quick-tip-mongodb-users/

3
Justin Jenkins

次の手順を順番に実行してください

  • CLIを使用してユーザーを作成する
use admin
db.createUser(
  {
    user: "admin",
    pwd: "admin123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)
  • 認証を有効にします。OSによって認証方法が異なります。Windowsを使用している場合は、mongod --authを使用できます。Linuxの場合は、/etc/mongod.confファイルを編集してsecurity.authorization : enabledを追加し、mongdサービスを再起動できます
  • Cli mongo -u "admin" -p "admin123" --authenticationDatabase "admin"経由で接続するには。それでおしまい

この投稿 をチェックして、詳細を確認し、mongooseを使用して接続する方法を学習できます。

2
rahil471

これらのステップは私に働きました:

  1. cmdにmongod --port 27017と入力します。
  2. 次にmongo Shellに接続します。mongo --port 27017
  3. adminユーザーを作成します。admin db.createUser({user: "myUserAdmin"、pwd: "abc123"、roles:[{role: "userAdminAnyDatabase"、db: "admin"}]})
  4. 切断mongoシェル
  5. mongodbを再起動します。mongod --auth --port 27017
  6. mongoシェルを起動します。mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
  7. 接続後に認証するには、mongoシェルをmongodに接続します。mongo --port 27017
  8. 認証データベースに切り替えます。admin db.auth( "myUserAdmin"、 "abc123"を使用します。
2
Kevin Niasta

以下のようにmongoDBに接続するためのベストプラクティス:

  1. 初期インストール後

    use admin

  2. その後、次のスクリプトを実行して管理者ユーザーを作成します。

    db.createUser( { user: "YourUserName", pwd: "YourPassword", roles: [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "clusterAdmin", db: "admin" } ] })

次のスクリプトはDBの管理ユーザーを作成します。

  1. を使用してdb.adminにログインします。

    mongo -u YourUserName -p YourPassword admin

  2. ログイン後、1から3を繰り返すことで、同じ管理者資格情報または異なるN個のデータベースを作成できます。

これにより、MongoDBで作成したコレクションごとに異なるユーザーとパスワードを作成できます。

1
Balaji.J.B

これは私がUbuntu 18.04でしたことです。

$ Sudo apt install mongodb
$ mongo
> show dbs
> use admin
> db.createUser({  user: "root",  pwd: "rootpw",  roles: [ "root" ]  })  // root user can do anything
> use lefa
> db.lefa.save( {name:"test"} )
> db.lefa.find()
> show dbs
> db.createUser({  user: "lefa",  pwd: "lefapw",  roles: [ { role: "dbOwner", db: "lefa" } ]  }) // admin of a db
> exit
$ Sudo vim /etc/mongodb.conf
auth = true
$ Sudo systemctl restart mongodb
$ mongo -u "root" -p "rootpw" --authenticationDatabase  "admin"
> use admin
> exit
$ mongo -u "lefa" -p "lefapw" --authenticationDatabase  "lefa"
> use lefa
> exit
1
Jinmin

新しいユーザーを作成したら、そのユーザーに対するgrantread/write/root権限を忘れないでください。あなたが試すことができます

cmd: db.grantRolesToUser('yourNewUsername',[{ role: "root", db: "admin" }])

0
Haisheng Yu