我有一个Jhipster Spring启动项目。最近我从mlabs独立沙盒转移到Atlas集群沙盒M0 Free层副本集。它甚至工作了,我对它进行了一些数据库操作。但是现在由于某种原因出现了读取权限错误
Error creating bean with name 'mongobee' defined in class path resource [DatabaseConfiguration.class]: Invocation of init method failed; nested exception is com.mongodb.MongoQueryException: Query failed with error code 8000 and error message 'user is not allowed to do action [find] on [test.system.indexes]' on server ********-shard-00-01-mfwhq.mongodb.net:27017
你可以在这里看到完整的堆栈https://pastebin.com/kaxcr7VS
我搜索了高和低,我能找到的是M0层用户没有权限覆盖管理数据库,我没有这样做。
即使现在连接到 Mlabs DB 工作正常,但在 Atlas 数据库 M0 层上也存在此问题。
Mongo DB版本:3.4
JAR及其版本名称:“mongobee”,版本:“0.10”,名称:“mongo java驱动程序”,版本:“3.4.2”
@Neil Lunn我用来连接的userId是admin的,连接读写通过shell或Robo3T(mongo客户端)工作
Caused by: java.lang.NoSuchMethodError: com.github.mongobee.dao.ChangeEntryIndexDao.<init>(Ljava/lang/String;)V
at com.github.mongobee.dao.ChangeEntryDao.<init>(ChangeEntryDao.java:34)
at com.github.mongobee.Mongobee.<init>(Mongobee.java:87)
at com.xxx.proj.config.DatabaseConfiguration.mongobee(DatabaseConfiguration.java:62)
at com.xxx.proj.config.DatabaseConfiguration$$EnhancerBySpringCGLIB$$4ae465a5.CGLIB$mongobee$1(<generated>)
at com.xxx.proj.config.DatabaseConfiguration$$EnhancerBySpringCGLIB$$4ae465a5$$FastClassBySpringCGLIB$$f202afb.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:358)
at com.xxx.proj.config.DatabaseConfiguration$$EnhancerBySpringCGLIB$$4ae465a5.mongobee(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
... 22 common frames omitted
jhipster 5必须使用不同的版本,因为我在实现上述代码时得到了它。看起来它期待一个不同的版本。
今天早上遇到了这个问题。这里有一个快速而肮脏的猴子补丁来解决这个问题:
package com.github.mongobee.dao;
import com.github.mongobee.changeset.ChangeEntry;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import java.util.List;
import static com.github.mongobee.changeset.ChangeEntry.CHANGELOG_COLLECTION;
public class ChangeEntryIndexDao {
public void createRequiredUniqueIndex(DBCollection collection) {
collection.createIndex(new BasicDBObject()
.append(ChangeEntry.KEY_CHANGEID, 1)
.append(ChangeEntry.KEY_AUTHOR, 1),
new BasicDBObject().append("unique", true));
}
public DBObject findRequiredChangeAndAuthorIndex(DB db) {
DBCollection changelogCollection = db.getCollection(CHANGELOG_COLLECTION);
List<DBObject> indexes = changelogCollection.getIndexInfo();
if (indexes == null) return null;
for (DBObject index : indexes) {
BasicDBObject indexKeys = ((BasicDBObject) index.get("key"));
if (indexKeys != null && (indexKeys.get(ChangeEntry.KEY_CHANGEID) != null && indexKeys.get(ChangeEntry.KEY_AUTHOR) != null)) {
return index;
}
}
return null;
}
public boolean isUnique(DBObject index) {
Object unique = index.get("unique");
if (unique != null && unique instanceof Boolean) {
return (Boolean) unique;
} else {
return false;
}
}
public void dropIndex(DBCollection collection, DBObject index) {
collection.dropIndex(index.get("name").toString());
}
}
与MongoDB支持团队讨论后,MongoDB 3.0反对直接访问系统。索引
集合,以前用于列出数据库中的所有索引。应用程序应该使用<code>db。
从MongoDB Atlas文档可以看出,它们可能禁止调用<code>系统 集合:
(可选)对于读写角色,还可以指定集合。如果未为读和读写指定集合,则该角色将应用于数据库中的所有集合(不包括某些system.collections)。
从stacktrace可以看出,MongoBee正在尝试进行这个调用,所以现在是库的问题,应该进行更新。
更新:为了在MongoBee发布新版本之前解决问题:
cd mongobee
git结账mongobee atlas
mvn.clean安装
/target
文件夹或本地/获取编译的jar。m2
null
我正在尝试连接到本地MongoDB实例(版本3.2)。我已经在构建中指定了依赖项。格拉德尔是这样的: 依赖项{编译'org.mongodb: mongoDB驱动程序: 3.3.0'} 我有一个简单的App.java文件,其中包含以下代码(见下文)。构建/编译Java步骤都运行良好,没有错误。但是当我运行代码时,我得到:“线程”主要“java.lang.noClassDefFoundEror中的异常
根据Spring Cloud Kubernetes文档,为了在RBAC发现服务/pods,启用了Kubernetes发行版: 您需要确保运行spring-cloud-kubernetes的pod能够访问Kubernetes API。对于您分配给部署/pod的任何服务帐户,您需要确保它具有正确的角色。例如,根据您所在的项目,您可以将< code >群集阅读器权限添加到您的默认服务帐户。 为了发现服务
本文介绍了如何使用个人电脑(Linux 或 macOS 系统)在阿里云上部署 TiDB 集群。 环境需求 aliyun-cli >= 3.0.15 并且配置 aliyun-cli 注意: Access Key 需要具有操作相应资源的权限。 kubectl >= 1.12 helm >= 2.11.0 && < 3.0.0 && != 2.16.4 jq >= 1.6 terraform 0.12.