Verbindung zu MongoDB mit Authentifizierung fehlschlägt
Ich bin mit einer MongoDB in Version 3 und habe ich eine Datenbank mit dem Namen 'logMonitor' und erstellt einen Benutzer wie:
{
"_id" : "logMonitor.log",
"user" : "log",
"db" : "logMonitor",
"roles" : [
{
"role" : "readWrite",
"db" : "logMonitor"
}
]
}
wenn ich eine Verbindung zu der Datenbank per shell mit dem Benutzer "anmelden", es gibt success
, genau wie dieser:
[jboss@chonggouapp mongodb]$ mongo logMonitor -u "log" -p "log"
MongoDB shell version: 3.0.6
anschließen: logMonitor
Jedoch die Verbindung via Java mit dem folgenden code nicht.
ServerAddress addr = new ServerAddress("10.46.20.65", 27017);
MongoCredential credential = MongoCredential.createMongoCRCredential(
"log", "logMonitor", "log".toCharArray());
MongoClientOptions options = MongoClientOptions.builder()
.serverSelectionTimeout(1000)
.build();
MongoClient mongoClient = new MongoClient(addr, Arrays.asList(credential), options);
MongoDatabase db = mongoClient.getDatabase("logMonitor");
long c = db.getCollection("sysLog").count();
Wird folgende Ausnahme ausgegeben:
Exception in thread "main" com.mongodb.MongoTimeoutException: Timed out nach 1000 ms beim warten auf einen server, Spiele ReadPreferenceServerSelector{readPreference=PV}. Client-Ansicht der cluster-Status ist {type=UNKNOWN, Server=[{Adresse=10.46.20.65:27017, Typ=UNBEKANNT, Status=VERBINDEN, Ausnahme={com.mongodb.MongoSecurityException: Ausnahme authentifizieren}, verursacht durch {com.mongodb.MongoCommandException: Befehl fehlgeschlagen mit Fehler 18: 'auth failed' auf server 10.46.20.65:27017. Die vollständige Antwort ist { "ok" : 0.0, "errmsg" : "auth failed", "code" : 18 }}}]
bei com.mongodb.- Verbindung.BaseCluster.createTimeoutException(BaseCluster.java:370)
bei com.mongodb.- Verbindung.BaseCluster.selectServer(BaseCluster.java:101)
bei com.mongodb.die Bindung.ClusterBinding$ClusterBindingConnectionSource.(ClusterBinding.java:75)
bei com.mongodb.die Bindung.ClusterBinding$ClusterBindingConnectionSource.(ClusterBinding.java:71)
bei com.mongodb.die Bindung.ClusterBinding.getReadConnectionSource(ClusterBinding.java:63)
bei com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:65)
bei com.mongodb.Betrieb.CountOperation.execute(CountOperation.java:172)
bei com.mongodb.Betrieb.CountOperation.execute(CountOperation.java:43)
bei com.mongodb.Mongo.execute ("Mongo".java:738)
bei com.mongodb.Mongo$2.execute ("Mongo".java:725)
bei com.mongodb.MongoCollectionImpl.count(MongoCollectionImpl.java:167)
bei com.mongodb.MongoCollectionImpl.count(MongoCollectionImpl.java:147)
bei com.baosight.bsfc4.mn.lg.utils.Test.main(Test.java:34)
Kann mir jemand sagen, was ist das problem? Ist etwas falsch mit meinem java-code?
Dank.
InformationsquelleAutor Yuanping Wu | 2015-12-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
createMongoCredential()
statt und es sollten die richtige Art von Anmeldeinformationen für Sie.Ja, createCreadentials gearbeitet !
InformationsquelleAutor evanchooly
Überprüfen Sie Verschiedene Arten von Methoden: http://api.mongodb.com/java/current/com/mongodb/MongoCredential.html
Versuchen Sie es mit
Statt
Später verwendet Challenge-Response-Protokoll, welches möglicherweise nicht unterstützt/zugelassen durch Ihre MongoDB.
InformationsquelleAutor Ashish Pushp
Komplette code unter Berücksichtigung Authentifizierung während der Verbindung zum MongoDB-server-Instanz unter Verwendung der Java, ist:
InformationsquelleAutor Nestor Milyaev