Query failed with error code 13 and error message 'not authorized on longtest to execute command { find: "system.profile", limit: 1000, $db: "longtest", $readPreference: { mode: "primaryPreferred" } }
没有开场白,直接说,mongodb 版本 4.0.28、4.0.14、5.0.5发现的问题
我有个用户 xianchang 对 数据库 longtest 有 readWrite。
然后另一个用户longtestAdmin 对数据库 longtest 有权限开启 Database Profiler 的权限。
Database Profiler — MongoDB Manual
这时当我用metamodel 用xianchang用户 使用 db.getCollectionNames()就会拉取到system.profile 这张表,

但是用户 xianchang 对 system.profile 这张表是没有find() 权限的

所以后端报错:
com.mongodb.MongoQueryException: Query failed with error code 13 and error message 'not authorized on longtest to execute command { find: "system.profile", limit: 1000, $db: "longtest", $readPreference: { mode: "primaryPreferred" } }' on server 172.16.0.209:28017
at com.mongodb.operation.FindOperation$1.call(FindOperation.java:706)
at com.mongodb.operation.FindOperation$1.call(FindOperation.java:695)
at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:462)
at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:406)
at com.mongodb.operation.FindOperation.execute(FindOperation.java:695)
at com.mongodb.operation.FindOperation.execute(FindOperation.java:83)
at com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:179)
at com.mongodb.client.internal.MongoIterableImpl.execute(MongoIterableImpl.java:132)
at com.mongodb.client.internal.MongoIterableImpl.iterator(MongoIterableImpl.java:86)
at org.apache.metamodel.mongodb.mongo3.MongoDbDataContext.detectTable(MongoDbDataContext.java:155)
at org.apache.metamodel.mongodb.mongo3.MongoDbDataContext.detectSchema(MongoDbDataContext.java:132)
at org.apache.metamodel.mongodb.mongo3.MongoDbDataContext.<init>(MongoDbDataContext.java:113)
在metamodel 的源码中便会用的find()语句

在客户的那边使用Navicat 遍历 db.getCollectionNames()也发现了这张表,
暂时先写这么多有空再补……请有懂的大佬赐教
在MongoDB 4.0.28、4.0.14和5.0.5版本中,遇到一个用户权限问题。用户xianchang对数据库longtest有readWrite权限,但无权访问system.profile集合。尽管longtestAdmin用户有开启DatabaseProfiler的权限,当使用xianchang用户通过Metamodel执行db.getCollectionNames()时,由于不具find()权限,导致了'notauthorizedonlongtesttoexecutecommand'错误。Navicat同样显示了system.profile,但实际查询会失败。问题在于如何正确配置用户权限以避免此类异常。
1万+

被折叠的 条评论
为什么被折叠?



