MongoDb: creating user in $ external via Java driver

We need to create users in $ external so they can login via LDAP. In a command shell, run the following command:

db.getSiblingDB('$external').createUser({ user : 'username', roles: [ { role: 'dbOwner', db: 'databasename' } ] } )

      

works fine.

But since we are executing the same command with the Java Driver, we get exceptions.

Java code:

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);

      

Results reporting:

{ "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}}

      

We are running MongoDb version 3.0.1 with Java driver 2.13.1.

It would be nice if somebody knows how we can create users in $ external via Java driver.

Thanks a lot and best wishes, Jakob

EDIT:

We also used the following code for testing:

    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);

      

Result:

{ "serverUsed" : "server:27017" , "ok" : 0.0 , "errmsg" : "No role named { role: 'dbOwner', db: 'CMRepWs_Username'}@$external" , "code" : 31}

      

Inside the CommandResult object.

+3


source to share


1 answer


The following code works fine:

    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();

      



So, also for the role, you need to add a new BasicDBOb object.

Regards, Jakob

0


source







All Articles