允许MongoDB db.collection.aggregate()使用需要什么角色?

时间:2015-11-30 04:05:58

标签: mongodb authorization

我在admin.system.users中有一个用户:

{ 
    "_id" : "admin.reports", 
    "user" : "reports", 
    "db" : "admin", 
    "credentials" : {
        "MONGODB-CR" : "hash"
    }, 
    "roles" : [
        {
            "role" : "read", 
            "db" : "mydb"
        }
    ]
}

我试图从bash脚本执行此操作:

mongo --quiet mongodb.production.internal/admin -ureports -p"password"  <<< "
var conn = connect('localhost/mydb');
db.auth('reports', 'password');

db.Collection.aggregate([
  {
    \$group: {
      _id: '\$itemId',
      count: { \$sum: 1 }
    }
  },
  {
    \$sort: {
      count: 1
    }
  }
], {cursor: {}}).forEach(function(line) {
  print(line._id+','+line.count);
});
"

我从mongodb实例获得此响应: not authorized on admin to execute command { aggregate:(除了其他非常详细但毫无意义的输出)。

我需要什么权限才能为此用户启用聚合命令?如果没有启用写访问权限,是否可以完成?

1 个答案:

答案 0 :(得分:0)

问题不在于权限,read确实已足够,但正确切换到正确的数据库。

我正在使用connect()静默(无输出)切换到工作数据库,因为use命令会抛出输出。这是不正确的,解决方法是在命令行上指定连接的方式,即:

mongo --quiet mongodb.production.internal/mydb --authenticationDatabase admin -ureports -p"password"