是否可以获取Mongodb中特定用户可以访问的数据库列表?
答案 0 :(得分:0)
您可以通过查找该用户来检查特定用户的访问权限 system.users 集合。他们可以在 db 键上添加投影,该键位于角色键下。
以下是用户集合中的文档结构。
{
_id: <system defined id>,
user: "<name>",
db: "<database>",
credentials: { <authentication credentials> },
roles: [
{ role: "<role name>", db: "<database>" },
...
],
customData: <custom information>
}
答案 1 :(得分:0)
在MongoDB shell中,以下命令将列出数据库:
db.adminCommand('listDatabases')
或
db.getMongo().getDBNames()
对于当前的Java API,请使用 MongoClient 的 listDatabaseNames()
方法,该方法返回包含所有数据库的所有名称的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();
}
}
}
答案 2 :(得分:0)
从4.0.5版MongoDB开始,listDatabases中提供了一个选项,该选项仅允许filter授权的数据库:
authorizedDatabases [boolean] [可选]:一个标志,用于确定在启用访问控制后根据用户权限返回哪些数据库。
可能类似于:
return mongoClient.getDatabase("admin").runCommand(
new BasicDBObject("listDatabases",
new BasicDBObject("authorizedDatabases", 1)
)
);
阅读完整的文档,因为版本之间存在一些细微的差异: