通过python将用户添加到mongodb

rhe*_*eck 7 python mongodb pymongo

我希望能够将用户添加到MongoDB,以便我们可以使用已经编入的身份验证自动化MongoDB安装.我可以使用只读的pymongo成功添加用户,或者通过执行以下操作成为dbOwner:

from pymongo import MongoClient

client = MongoClient('localhost:27017')   
client.admin.authenticate('siteRootAdmin', 'Test123')
client.testdb.add_user('newTestUser', 'Test123', True)
Run Code Online (Sandbox Code Playgroud)

但是当我在代码块之后执行此操作以指定角色时,它会失败:

from pymongo import MongoClient

client = MongoClient('localhost:27017')
client.admin.authenticate('siteRootAdmin', 'Test123')
client.testdb.add_user('newTestUser', 'Test123', False, 'readWrite')
Run Code Online (Sandbox Code Playgroud)

有错误:

line 10, in <module>
    client.admin.add_user('newTestUser', 'Test123', False, 'readWrite')
TypeError: add_user() takes at most 4 arguments (5 given)
Run Code Online (Sandbox Code Playgroud)

在文档中,它暗示您可以为用户文档提供可选字段,例如其他角色.有没有人能够正确设置这些?也就是说,我想拥有readWrite服务帐户,可以将数据添加到集合,但没有完整的dbOwner权限.

em2*_*2er 13

从版本 3 开始add_user弃用,并将在后续版本中删除。调用时会产生以下警告:

DeprecationWarning: add_user is deprecated and will be removed in PyMongo 4.0. Use db.command with createUser or updateUser instead
Run Code Online (Sandbox Code Playgroud)

上面的代码可能会被重写为

client.testdb.command(
    'createUser', 'newTestUser', 
    pwd='Test123',
    roles=[{'role': 'readWrite', 'db': 'testdb'}]
)

Run Code Online (Sandbox Code Playgroud)


ZZY*_*ZZY 8

这是解决方法:

client.testdb.add_user('newTestUser', 'Test123', roles=[{'role':'readWrite','db':'testdb'}])
Run Code Online (Sandbox Code Playgroud)

注意:当您要设置"角色"时,应将第3个参数(read_only)留空.