有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (3) 个答案

  1. # 1 楼答案

    由于4.0.5 MongoDB,listDatabases中有一个选项,只允许filter授权数据库:

    authorizedDatabases [boolean] [Optional]: A flag that determines which databases are returned based on the user privileges when access control is enabled.

    可能是这样的:

    return mongoClient.getDatabase("admin").runCommand(
          new BasicDBObject("listDatabases",
                new BasicDBObject("authorizedDatabases", 1)
          )
    );
    

    阅读完整的文档,因为不同版本之间存在一些细微的差异:

    • MongoDB 4.0.5:具有查找权限的数据库
    • MongoDB 4.0.6+:具有查看权限的数据库,即使受到限制 到特定集合
  2. # 2 楼答案

    在MongoDB shell中,以下命令将列出数据库:

    db.adminCommand('listDatabases')
    

    db.getMongo().getDBNames()
    

    对于当前的Java API,使用MongoClient^{}方法,该方法返回一个包含所有数据库名称的iterable。例如(未经测试):

    import java.net.UnknownHostException;
    import java.util.List;
    import java.util.Set;
    
    import com.mongodb.DB;
    import com.mongodb.MongoClient;
    
    public class JavaMongoDBConnection {
    
        public static void main(String[] args) {
            try {
    
                MongoClient mongoClient = new MongoClient("localhost", 27017);
    
                MongoIterable<String> allDatabases = mongoClient.listDatabaseNames();
    
                for (String dbName : allDatabases) {                
    
                    DB db = mongoClient.getDB(dbName);
    
                    char[] password = new char[] {'s', 'e', 'c', 'r', 'e', 't'};
                    boolean authenticated = db.authenticate("user", password);
    
                    if (authenticated) {
                        System.out.println("Successfully logged in to MongoDB!");
                        System.out.println("Database: " + dbName);
    
                        Set<String> collections = db.getCollectionNames();
                        for (String colName : collections) {
                            System.out.println("\t + Collection: " + colName);
                        }
    
                    } else {
                        System.out.println("Invalid username/password");
                    }
    
                }
    
                mongoClient.close();
    
            } catch (UnknownHostException ex) {
                ex.printStackTrace();
            }
    
        }
    }
    
  3. # 3 楼答案

    您可以通过在中查找特定用户来检查该用户的访问权限 系统。用户收集。您可以在角色下的db键上添加投影

    以下是用户集合中的文档结构

    {
      _id: <system defined id>,
      user: "<name>",
      db: "<database>",
      credentials: { <authentication credentials> },
      roles: [
               { role: "<role name>", db: "<database>" },
               ...
             ],
      customData: <custom information>
     }