web-dev-qa-db-ja.com

新規/別のmongoデータベースにユーザーを追加するには、どのMongoDBユーザー特権が必要ですか?

userAdminおよびuserAdminAnyDatabaseの特権を持つ1人の管理者ユーザーを追加した後、MongoDB構成ファイルで認証を有効にしました。

次に、このユーザーを使用して、この管理ユーザーが定義されているdbに接続します(そうでない場合は、exception: login failed)。

接続に成功したら、新しいユーザーを新しいデータベースに追加します。そのために私は試しています:

use another
db.addUser(...)

しかし、私はエラーが発生します:

Wed Dec 11 17:45:18.277 couldn't add user: not authorized for insert on app.system.users at src/mongo/Shell/db.js:128

新しいデータベースを作成して最初のユーザーを追加するにはどうすればよいですか?


詳細(この例では、すべてのユーザーがパスワードとして1234を持っています)

$ mongo mono -u admin_all -p 1234
MongoDB Shell version: 2.4.6
connecting to: mono
> db.system.users.find()
{ "_id" : ObjectId("52a9831de41eb640bb0f5f64"), "user" : "admin_all", "pwd" : "a6316ed4886c10663cce46bc216ea375", "roles" : [  "userAdmin",  "userAdminAnyDatabase" ] }
{ "_id" : ObjectId("52a98404ef1f9bc934b62e11"), "user" : "admin_one", "pwd" : "884f516cf308a4c6a75bbc5a0a00807b", "roles" : [  "userAdmin" ] }
{ "_id" : ObjectId("52a98415ef1f9bc934b62e12"), "user" : "admin_any", "pwd" : "1616611df9b47c58b607054d384cab99", "roles" : [  "userAdminAnyDatabase" ] }
> use another
switched to db another
> db.addUser({ user: "user", pwd: "1234", roles: ["read"] })
{
    "user" : "user",
    "pwd" : "461d4f349d8d4ec3d22a4c945010c330",
    "roles" : [
        "read"
    ],
    "_id" : ObjectId("52a985372fcdbfd033003a7e")
}
Thu Dec 12 10:43:19.091 couldn't add user: not authorized for insert on another.system.users at src/mongo/Shell/db.js:128
15

間違いは、[〜#〜] not [〜#〜]であったuserAdminAnyDatabaseユーザーを使用していたことですadminデータベース( この注 を参照)。したがって、[〜#〜] [〜#〜]adminサーバーで!ドキュメントが「AnyDatabase」特権について述べているように:

これらのロールのいずれかをadminデータベースの外部のユーザー特権ドキュメントに追加した場合、特権は無効になります。

だからあなたはする必要があります:

  • userAdminAnyDatabaseadmindbに追加します

    $ mongo admin
    > db.createUser({ user: "myadmin", pwd: "1234", roles: ["userAdminAnyDatabase"] })
    
  • 認証をオンにする

    auth = true
    setParameter = enableLocalhostAuthBypass=0
    
  • 新しいmyadminユーザーを使用して任意のデータベースに接続し、さらにユーザーを追加します。

    $ mongo another -u myadmin -p 1234
    > db.createUser({ user: "user", pwd: "1234", roles: ["readWrite"] })
    

    または

    > use another
    > db.createUser({ user: "user", pwd: "1234", roles: ["readWrite"] })
    
35