我们需要在$ external中创建“用户”,以允许他们通过LDAP登录。在命令外壳上,以下命令:
db.getSiblingDB('$external').createUser({ user : 'username', roles: [ { role: 'dbOwner', db: 'databasename' } ] } )
工作正常。
但是就我们通过Java驱动程序执行同一命令而言,我们正在获得异常。
Java代码:
DB db = mongoClient.getDB("$external");
String command = "db.getSiblingDB('$external').createUser({ user : '"+ userName +"', roles: [ { role: 'dbOwner', db: 'CMRepWs_'"+userName.toUpperCase()+"' } ] } )";
CommandResult result = db.command(command);
结果消息:
{ "serverUsed" : "lblasa1t.cm-cic.fr:27017" , "ok" : 0.0 , "errmsg" : "no such command: db.getSiblingDB('$external').createUser({ user : 'username', roles: [ { role: 'dbOwner', db: 'CMRepWs_username' } ] } )" , "code" : 59 , "bad cmd" : { "db.getSiblingDB('$external').createUser({ user : 'username', roles: [ { role: 'dbOwner', db: 'CMRepWs_username' } ] } )" : true}}
我们正在运行带有Java驱动程序2.13.1的MongoDb版本3.0.1。
如果有人对如何通过Java驱动程序在$ external中创建用户有所了解,那就太好了。
非常感谢和最诚挚的问候,雅各布
编辑:
我们还使用以下代码进行测试:
DB db = mongoClient.getDB("$external");
String dbOwner = "dbOwner";
String dbName = "CMRepWs_" + userName.toUpperCase();
String role = "{ role: '" + dbOwner + "', db: '" + dbName + "'}";
Map<String, Object> commandArguments = new BasicDBObject();
String[] roles = new String[] { role };
commandArguments.put("createUser", userName);
commandArguments.put("roles", roles);
BasicDBObject command = new BasicDBObject(commandArguments);
CommandResult result = db.command(command);
结果是:
{ "serverUsed" : "server:27017" , "ok" : 0.0 , "errmsg" : "No role named { role: 'dbOwner', db: 'CMRepWs_Username'}@$external" , "code" : 31}
在CommandResult对象中。
以下代码可以正常工作:
DB db = client.getDB("$external");
CommandResult result = db.command(new BasicDBObject("createUser",userName).append("roles", Collections.singletonList(new BasicDBObject("role", "dbOwner").append("db", "CMRepWs_Username"))));
result.throwOnError();
因此,对于这个角色,还需要完善一个新的BasicDBObject。
问候,雅各布
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句