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


376

MongoDBインスタンスにユーザー名とパスワードの認証を設定して、リモートアクセスがユーザー名とパスワードを要求するようにします。MongoDBサイトのチュートリアルを試し、次のことを行いました。

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

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


更新これは私が最終的に使用したソリューションです

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ます。


4
これはMongDBバージョン2.2.xの場合
Tom

22
Mongo 3.0.4では、ユーザーを作成するためのコマンドはdb.createUser()です。
chronologos



1
明確にするために、これはネットワークを通過するバイトを暗号化しません。アクセス制御専用です。
ダニエルF

回答:


117

ユーザーを設定した後mongod--authオプションから開始する必要があります。

MongoDBサイトから:

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

MongoDB認証


1
私はそれを試し、例に従いました。今.. --authでサーバーを再起動した後に設定できます。しかし、ログインしようとすると(./mongo -u theadmin -p 12345)、失敗します。ログインできません。
murvinlai

それでも接続できない場合は、adminデータベースに接続しようとしているためです。別のデータベースを使用して、再試行してください。userAdmin(AnyDatabase)のみがに接続できadminます。
Vadorequest 2014

80

ここに、非常に多くの複雑で混乱を招く答えがあります。

これは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({})

2
最後に、私は本当に何が起こっているのかを知りました。
私が開始したのは2017年


3
私は、受け入れられた答えがSOでリフレッシュできることを願っています。これは、7月2017年のように最も関連性の高いソリューションです
azatar

1
回答を更新してください!どこからuserAdminAnyDatabaseを取得したかわかりませんが、機能しません。ロールは、すべてのデータベースに対する管理者アクセスのルートです。
Aakash Verma

@ AakashVermadocs.mongodb.com / manual/ reference / built - in- roles / ;)また、危険にさらされないことがわかっている開発目的でない限り、ROOTは絶対に使用しないでください。(tbhはrootを使用しないでくださいlol)
K-SOの毒性が増加しています。

63

最初に、#auth=truemongod構成ファイル(デフォルトのパス/etc/mongo.conf)で始まる行のコメントを外します。これにより、mongodbの認証が有効になります。

次に、mongodbを再起動します。 sudo service mongod restart


10
デフォルトのパスではあり/etc/mongod.confません/etc/mongo.conf
Mithril、2015

2
または、まずコメントを外してから再起動します:)))
GioMac

2
更新:sudo service mongodb restart
sharafjaffriを

構成ファイルの場所と名前は次のとおりです:/etc/mongodb.conf
HGMamaci

46

この回答は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

2
2.4などの古いバージョンではdb.addUserを使用します
arviman

それ以外の場合はエラーが発生するuse admin前に入力するcreateUser必要がありました。
ギヨームF.

28

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

  1. スタートmongod付き--auth = true

  2. mongoシェルから管理データベースにアクセスし、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. これでユーザーの追加が完了しました。mongoシェルからデータベースへのアクセスを確認できます


1
ファイルにユーザー名とパスワードを設定することは、非常に安全に見えません。
探索

JavaScript。「javaスクリプト」ではありません。
Camilo Martin

ここでJavaScriptファイルの目的は何ですか?
Ravi

@CamiloMartin JavaScript。「JavaScript」ではありません。
Madbreaks


10

最初に使用してターミナルでmongoDBを実行します

mongod

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

    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/


1
rootを使用してユーザーを定義した後、ユーザーが見つかるまでさらに追加しますが、MongoDB Enterprise > db.system.users.find() { "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SC RAM-SHA-1" : { "iterationCount" : 10000, "salt" : "k96PCEflidMY5seVju+gAw==", "s toredKey" : "CabQTnJtny7cv0wT5X8oX9QOn3A=", "serverKey" : "RJyCdnlIhyIfj2+d44L61 bYK+MU=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" }, { "role" : "dbAdmin", "db" : "admin" }, { "role" : "userAdmin", "db" : "admin" }, { "role" : "root", "db" : "admin" } ] }それでも認証は失敗します
deadManN

私はdb.changeUserPassword()を使用したり、その後も、db.auth( 'admin'、 'my pass')またはそれを実行した方法を使用したりすると、ユーザーadminの認証が失敗したと表示されます
デッドマンN

root役割を使用して、次の役割の操作とすべてのリソースへのアクセスを提供します... 役割ルート
Laode Muhammad Al Fatih

8

これは私が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

8

あなたは変えることができます/etc/mongod.conf

#security:

security:
    authorization: "enabled"

その後 sudo service mongod restart


5

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

  • 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を使用して接続する方法を学んでください。


4

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

use dbName

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


3

これらの手順は私に働きました:

  1. コマンドでmongod --port 27017と書き込みます
  2. 次に、mongoシェルに接続します。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"を使用します

3

次のように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で作成する別のコレクションに別のユーザーとパスワードを作成できます


この後、sudo nano /etc/mongod.confに移動して、この行にsecurity.authorization:を有効にすると、参照リンクがここに表示されます。 stackoverflow.com/a/57384027/3904109
DragonFire

2

新しいユーザーを作成したらgrant read/write/root、そのユーザーに許可を与えることを忘れないでください。あなたは試すことができます

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.