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

Ama*_*mar 6 java mongodb

我是MongoDB的新手.我正在尝试通过Java Driver在MongoDB中为数据库创建用户.我使用的是mongo-java-driver 3.0.1版本.我在谷歌搜索,我没有找到相关的答案.我看到mongo-java-driver 2.13.0中有直接方法,但在最新版本中已弃用.我尝试使用以下代码来创建用户,但我得到了异常.

码:

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);
Run Code Online (Sandbox Code Playgroud)

例外:

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 }
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

  1. 如何为数据库创建用户.
  2. 如何获取数据库的所有用户.

注意:我使用的是JAVA库.

任何人都可以帮我这个.我卡在这里.

感谢和问候,Amar

dev*_*v ツ 8

你可以试试这个来创建用户:

    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);
Run Code Online (Sandbox Code Playgroud)


kuk*_*das 5

这两种方法都不适合我。然而这种方式有效:

 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);
Run Code Online (Sandbox Code Playgroud)