首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDb:通过$external驱动程序在$external中创建用户

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

Stack Overflow用户
提问于 2015-08-10 10:01:27
回答 1查看 743关注 0票数 3

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

代码语言:javascript
复制
db.getSiblingDB('$external').createUser({ user : 'username', roles: [ { role: 'dbOwner', db: 'databasename' } ] } )

效果很好。

但是,只要我们通过Java驱动程序执行相同的命令,我们就会得到异常。

Java代码:

代码语言:javascript
复制
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);

结果信息:

代码语言:javascript
复制
{ "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}}

我们使用JavaDriver2.13.1运行MongoDb版本3.0.1。

如果有人知道我们如何通过Java驱动程序在$external中创建用户,那就太好了。

非常感谢和最诚挚的问候,雅各布

编辑:

我们还使用以下代码进行测试:

代码语言:javascript
复制
    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);

其结果是:

代码语言:javascript
复制
{ "serverUsed" : "server:27017" , "ok" : 0.0 , "errmsg" : "No role named { role: 'dbOwner', db: 'CMRepWs_Username'}@$external" , "code" : 31}

在CommandResult对象中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-11 08:23:42

以下代码运行良好:

代码语言:javascript
复制
    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也需要大有可为。

你好,雅各布

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31916683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档