MongoDb:通过Java驱动程序在$ external中创建用户

时间:2015-08-10 10:01:27

标签: mongodb mongodb-java

我们需要在$ external中创建用户,以允许他们通过LDAP登录。 在命令shell上,使用以下命令:

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

工作正常。

但是,只要我们通过Java Driver执行相同的命令,我们就会遇到异常。

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 Driver 2.13.1运行MongoDb版本3.0.1。

如果有人知道我们如何通过Java Driver在$ 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对象中。

1 个答案:

答案 0 :(得分:0)

以下代码正常运行:

void Page_Load(Object sender, EventArgs e)
  {
    // Manually register the event-handling method for the   
     // CheckedChanged event of the CheckBox control.
     checkbox1.CheckedChanged += new EventHandler(this.Check_Clicked);
  }

void Check_Clicked(Object sender, EventArgs e) 
  {
  **//This is only sample code**
    // do your code

    if (panel2.Visible) 
    {
    panel2.Visible = false;
    cmdAdvanced.Visible = true;
    }
   }

同样对于角色,需要强调新的BasicDBObject。

此致 雅各布