mongodb 在使用metamodel getCollectionNames拉取到系统表

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 这张表,

mongodb 在使用metamodel getCollectionNames拉取到系统表_第1张图片

 

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

mongodb 在使用metamodel getCollectionNames拉取到系统表_第2张图片

所以后端报错:

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.(MongoDbDataContext.java:113)

在metamodel 的源码中便会用的find()语句

mongodb 在使用metamodel getCollectionNames拉取到系统表_第3张图片

在客户的那边使用Navicat 遍历 db.getCollectionNames()也发现了这张表,

 暂时先写这么多有空再补……请有懂的大佬赐教

你可能感兴趣的:(mongodb,数据库,database)