美文网首页
MongoDB之blukwrite引发的权限问题

MongoDB之blukwrite引发的权限问题

作者: 社会我大爷 | 来源:发表于2022-04-12 23:13 被阅读0次

问题:调用blukwrite updateone报错:

error: not authorized on db_amiya to execute command { update: "operations", updates: 1000, ordered: false, bypassDocumentValidation: true, lsid: { id: UUID("30a733a4-6bae-48be-8d7f-412ec1143c15") }, $db: "db_amiya" }

解决:
1、本地调用shell blukwrite

db.getCollection('operations').bulkWrite(
[
{
updateOne: {
filter: { createrName: 'Adminx' },
update: { $set: {descAfter: 'aaax1'} },
upsert: false
}
},
{
updateOne: {
filter: { createrName: 'Adminy' },
update: { $set: {descAfter: 'aaay2'} },
upsert: false
}
}
],
{ order: false}
);

2、本地demo复现报错

requests = [
           InsertOne({ "user_name":"user0003"}),
           UpdateOne({ "user_name":"user0003"},{"$set":{"user_name": "000000000"}})
           ]
result = mycollection.bulk_write(requests,ordered=True,bypass_document_validation=True)
 
########报错
pymongo.errors.OperationFailure: not authorized on test to execute command { insert: "log", ordered: true, bypassDocumentValidation: true, lsid: { id: UUID("eaff0502-c60c-4d96-b31e-ab4ecb62c8e8") }, $db: "test" }, full error: {'ok': 0.0, 'errmsg': 'not authorized on test to execute command { insert: "log", ordered: true, bypassDocumentValidation: true, lsid: { id: UUID("eaff0502-c60c-4d96-b31e-ab4ecb62c8e8") }, $db: "test" }', 'code': 13, 'codeName': 'Unauthorized'}

原因解释:bypass_document_validation=True

Mongodb3.2提供了在插入和更新时验证文档的功能。每个集合都是基于使用validator选项来指定验证规则的。该验证器选项是给文档指定验证规则或表达式,在操作文档是必须满足验证器规则才能成功。

由于代码指定bypass_document_validation=True需要dbAdmin和restore这两个角色权限;

相关文章

网友评论

      本文标题:MongoDB之blukwrite引发的权限问题

      本文链接:https://www.haomeiwen.com/subject/brlosrtx.html