首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Java在MongoDB中创建数据库用户

使用Java在MongoDB中创建数据库用户
EN

Stack Overflow用户
提问于 2015-05-28 19:27:54
回答 4查看 5.8K关注 0票数 6

我对MongoDB非常陌生。我正在尝试通过Java驱动程序为MongoDB中的数据库创建一个用户。我使用的是mongo-java-driver 3.0.1版本。我在谷歌上搜索了一下,没有找到相关的答案。我看到在mongo-java-Driver2.13.0中有直接方法,但在最新版本中被弃用了。我尝试使用下面的代码来创建用户,但是我得到了异常。

代码:

代码语言:javascript
复制
MongoClient mongoClient = new MongoClient("127.0.0.1","27017");
MongoDatabase mongoDatabase = this.mongoClient
                        .getDatabase(doc);
BasicDBObject commandArguments = new BasicDBObject();
commandArguments.put("user", mongoDatabase.getName());
commandArguments.put("pwd", "Cip#erCloud@123");
String[] roles = { "readWrite" };
commandArguments.put("roles", roles);
BasicDBObject command = new BasicDBObject("createUser",
                        commandArguments.toString());
mongoDatabase.runCommand(command);

异常:

代码语言:javascript
复制
com.mongodb.MongoCommandException: Command failed with error 2: 'Must provide a 'pwd' field for all user documents, except those with '$external' as the user's source db' on server 127.0.0.1:27017. 
The full response is { "ok" : 0.0, "errmsg" : "Must provide a 'pwd' field for all user documents, except those with '$external' as the user's source db", "code" : 2 }

以下是我的问题:

  1. 如何为database.?
  2. How创建用户以获取数据库的所有用户。?

注意:我使用的是Java库。

有人能帮帮我吗。我被困在这里了。

谢谢和问候,阿马尔

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-05-29 14:36:57

在创建用户时,您可以尝试这样做吗:

代码语言:javascript
复制
    MongoClient mongo = new MongoClient("localhost", 27017);
    MongoDatabase db =  mongo.getDatabase("testDB");
    Map<String, Object> commandArguments = new HashMap<>();
    commandArguments.put("createUser", "dev");
    commandArguments.put("pwd", "password123");
    String[] roles = { "readWrite" };
    commandArguments.put("roles", roles);
    BasicDBObject command = new BasicDBObject(commandArguments);
    db.runCommand(command);
票数 10
EN

Stack Overflow用户

发布于 2017-02-12 20:15:55

这两种方法对我都不起作用。然而,这种方式是有效的:

代码语言:javascript
复制
 final MongoDatabase db = mongoClient.getDatabase("myDatabase");
 final BasicDBObject createUserCommand = new BasicDBObject("createUser", "myuser").append("pwd", "mypassword").append("roles",
                            Collections.singletonList(new BasicDBObject("role", "dbOwner").append("db", "myDatabase")));
            db.runCommand(createUserCommand);
票数 4
EN

Stack Overflow用户

发布于 2018-08-12 04:37:10

我需要在测试用例中创建一个用户。如果用户已经存在,则运行createUser命令将抛出异常。在尝试创建用户之前,我添加了一些代码来删除该用户,以便异常不会出现在单元测试日志中。对我来说,添加此代码比捕获异常、验证它是否用于现有用户帐户并忽略它要容易得多。

要使用它,您需要设置用户名、密码和TEST_DATABASE_NAME。

代码语言:javascript
复制
    Document result = null;
    MongoDatabase db = mongo.getDatabase(TEST_DATABASE_NAME);
    BasicDBObject getUsersInfoCommand = new BasicDBObject("usersInfo",
            new BasicDBObject("user", username).append("db", TEST_DATABASE_NAME));
    BasicDBObject dropUserCommand = new BasicDBObject("dropUser", username);
    BasicDBObject createUserCommand = new BasicDBObject("createUser", username).append("pwd", password).append("roles",
                        Collections.singletonList(new BasicDBObject("role", "dbOwner").append("db", TEST_DATABASE_NAME)));

    // If test user exists from a previous run, drop it
    result = db.runCommand(getUsersInfoCommand);
    ArrayList users = (ArrayList) result.get("users");
    if (!users.isEmpty()) {
        db.runCommand(dropUserCommand);
    }

    db.runCommand(createUserCommand);

更好的做法是在测试完成后删除用户,但我在@AfterClass方法中有代码,这实际上是此测试的一部分,这将使共享此代码示例变得更加复杂。

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

https://stackoverflow.com/questions/30505260

复制
相关文章

相似问题

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