2017-11-14 3 views
1

私はの問題を持っています。 ロールユーザーを適用しようとしています。 特定のコレクションのみを検索、挿入、削除、および更新します。MongoDB - コレクションレベルのロール

私はこれをやっています。

  1. 役割を作成します。

    db.createRole({役割: 'user_role_col'、特権:[{リソース:{デシベル: 'something_else'、コレクション 'col_something_else'}、アクション:[ '見つけます'、' remove '、' insert '、' update ']}]、roles:[]}); 。

  2. その役割を持つユーザを作成します。

    db.createUser({ユーザー: 'user_col'、PWD: '1234'、ロール:[{役割: "user_role_col"、DB: "something_else"}]} ) 。

私は役割ユーザーを作成したとき、私はsomething_elseデータベース(使用がをsomething_else)

0エラーは得たが、私は、私はできませんcol_something_elseを、読み取ることができるにとどまります削除、更新、挿入する:(

私は間違っていますか?

答えて

1

私は次のコマンドは、あなたがしたことを複製すると信じています。ここで私はtest、データベース内の役割とユーザーを作成しています:

> use test 

> db.createRole({role: 'testRole', privileges: [{resource: {db:'test', collection:'test'}, actions:['find','update','insert','remove']}], roles: []}) 

> db.createUser({user:'testUser',pwd:'password',roles:[{role:'testRole', db:'test'}]}) 

私はその後、mongoシェルを終了し、新しい資格情報を使用して再認証をする必要があります。

$ mongo -u testUser -p password --authenticationDatabase test 

> db.test2.insert({a:1}) //try inserting to a non-"test" collection 
unauthorized 

> db.test2.find() //try find on a non-"test" collection 
unauthorized 

> db.test.insert({a:1}) //insert into "test" collection 
Inserted 1 record(s) 

> db.test.updateMany({},{$set:{a:2}}) //update "test" collection 
{ 
    "acknowledged": true, 
    "matchedCount": 1, 
    "modifiedCount": 1 
} 

> db.test.find() //find on "test" collection 
{ 
    "_id": ObjectId("5a0bcfa4322032cfcc3a69c6"), 
    "a": 2 
} 

> db.test.deleteOne({a:2}) //delete from "test" collection 
{ 
    "acknowledged": true, 
    "deletedCount": 1 
} 

> db.test.drop() //try to drop "test" collection 
2017-11-15T16:32:07.715+1100 E QUERY [thread1] Error: drop failed: { 
    "ok": 0, 
    "errmsg": "not authorized on test to execute command { drop: \"test\" }", 
    "code": 13, 
    "codeName": "Unauthorized" 
} 

私は新しいカスタム役割(testRole)が正しく承認されていることが見つかりました:私は役割とユーザーを作成した場所それはだからしかし、authenticationDatabaseパラメータは、testデータベースを指している必要があります。これはMongoDB 3.4.10を使用しています。

+0

私はこれがコードを試してもうまくいかないと思うので、やり直してみてください:| | –

関連する問題