是否可以使用pymongo创建用户定义的角色?

时间:2016-06-27 22:04:36

标签: mongodb pymongo

我有一个包含大约30个数据库的MongoDB实例,每个数据库都有一个“client_data”集合。我希望在所有数据库中为我的客户端提供对此集合的读取权限,而不是其他集合。我想编写一个类似这样的脚本:

mongoclient = pymongo.MongoClient("mongodb://admin:password@host/port")
rolenames = []
for dbname in mongoclient.get_databases():
   db = mongoclient[dbname]
   rolename = dbname + "role"
   rolenames.append[rolename]
   db.create_role(rolename, [ {resource: {db: dbname, collection: client_data}, actions: ["find"] } ])

然后

db.create_user("client", password, roles=rolenames)

我知道create_user()函数允许你传递预定义的角色作为参数,但是有没有办法在pymongo中定义新角色?

2 个答案:

答案 0 :(得分:5)

是的,你可以!看看我的例子:

db.command("createRole",
    "manageCurrentOpRole",
    privileges=[{"resource" : {"cluster" : True}, "actions" : ["inprog"]}],
    roles=[])

答案 1 :(得分:0)

这是为我工作的灵魂:

from pymongo import MongoClient
mongoclient = MongoClient(mongos,
                     username=mongo_admin_user,
                     password=mongo_admin_pass,
                     authSource='admin')
mongoclient.admin.command("createRole", rolename,
               privileges=[{"resource" : {"cluster" : True}, "actions" : ["inprog"]}],
               roles=[])

在您的情况下,您忘记添加客户端+ admin_database + action

  'mongoclient.admin.command'

请用您的mongo管理员凭据替换mongo_admin_user和mongo_admin_user。