web-dev-qa-db-ja.com

「admin」データベースへのアクセス権はないが、認証データベースとして使用するユーザーを設定するにはどうすればよいですか?

MongoDBでユーザーを設定したい。このユーザーは管理データベースにアクセスできません。ただし、認証データベースとしてadminを使用します。このコマンドmongo --Host localhost adminによるmongoDBの接続は失敗します。代わりに、次のコマンドを使用してtestデータベースに接続できます:mongo --Host localhost --authenticationDatabases admin test。この場合、どのように許可を制限できますか?

私はユーザーを作成するために以下のコマンドを試しました:

db.createUser({user: 'testUser', pwd: '123456', roles: [{role:'readWrite', db: 'SampleCollections'}]})

そのユーザーアカウントを使用してmongo Shellにログインすると、adminデータベースの下にコレクションを一覧表示できます。 SampleCollectionsではなくadminデータベースでのみユーザーを制限するにはどうすればよいですか?

3
Joey Yi Zhao

いらない。必要な管理者以外のデータベースに対する必要な権限をユーザーに与えるだけです。ユーザーは、管理データベースへの読み取り/書き込みアクセス権がない場合でも、認証データベースとして管理データベースを使用できます。

use products
db.grantRolesToUser("productsUser",[ "readWrite" ])

grantRolesToUser ドキュメント。

[〜#〜]更新[〜#〜]

--authを使用してmongodbインスタンスを作成してみましょう。管理者としてログインし、読み取り-テストのみ-dbのみが可能なユーザーを作成し、そのユーザーで認証し、リスト管理データベースコレクションを使用できることと、このユーザーがテストデータベースで実行できることを確認します。

#> mlaunch init --single --auth
launching: mongod on port 27017
Username "user", password "password"
#> mongo -u user -p password admin
MongoDB Shell version v3.4.6
connecting to: mongodb://127.0.0.1:27017/admin
MongoDB server version: 3.4.6
Mongo> db.createUser({user:"test", pwd:"testpwd", roles:[{role:"readWrite", db:"test"}]})
Successfully added user: {
    "user" : "test",
    "roles" : [
        {
            "role" : "readWrite",
            "db" : "test"
        }
    ]
}
Mongo> db.auth("test","testpwd")
1
Mongo> db
admin
Mongo> show collections
2017-09-11T19:06:22.001+0300 E QUERY    [thread1] Error: listCollections failed: {
    "ok" : 0,
    "errmsg" : "not authorized on admin to execute command { listCollections: 1.0, filter: {} }",
    "code" : 13,
    "codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/Shell/utils.js:25:13
DB.prototype._getCollectionInfosCommand@src/mongo/Shell/db.js:807:1
DB.prototype.getCollectionInfos@src/mongo/Shell/db.js:819:19
DB.prototype.getCollectionNames@src/mongo/Shell/db.js:830:16
shellHelper.show@src/mongo/Shell/utils.js:762:9
shellHelper@src/mongo/Shell/utils.js:659:15
@(shellhelp2):1:1
Mongo> use test
switched to db test
Mongo> db.coll.insert({})
WriteResult({ "nInserted" : 1 })
Mongo> show collections
coll
Mongo>  

外からも同じです:

#> mongo -u test -p testpwd --authenticationDatabase test
MongoDB Shell version v3.4.6
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.6
2017-09-11T19:17:48.614+0300 E QUERY    [thread1] Error: Authentication failed. :
DB.prototype._authOrThrow@src/mongo/Shell/db.js:1461:20
@(auth):6:1
@(auth):1:2
exception: login failed
#> mongo -u test -p testpwd --authenticationDatabase admin test
MongoDB Shell version v3.4.6
connecting to: mongodb://127.0.0.1:27017/test
MongoDB server version: 3.4.6
Mongo> 
1
JJussi

@趙毅、あなたが探しているものは?あなたがあなたの解決策を見つけられるように願っています ここ

たとえば、私は以下に示すように1つの例を添付しています

enter image description here

コードの説明は次のとおりです。

  1. 最初のステップは、作成する必要があるusernameおよびpasswordを指定することです。
  2. 2番目のステップは、ユーザーにロールを割り当てることです。この場合、データベース管理者である必要があるため、userAdminロールに割り当てられます。このロールにより、ユーザーはdbオプションで指定されたデータベースに対してのみ管理特権を持つことができます。
  3. Dbパラメータは、ユーザーが管理者権限を持つ必要があるデータベースを指定します。

注:出力は、ユーザーがEmployeeadminが作成され、そのユーザーはEmployeeデータベースに対してのみ特権を持っています。

1