mirror of
https://github.com/t8y2/dbx.git
synced 2026-10-21 03:33:35 +00:00
Fix: 修复 MongoDB 默认库影响认证库
Co-authored-by: staff <staff@qimaos-MacBook-Pro.local>
This commit is contained in:
@@ -257,7 +257,7 @@ public final class MongoAgent {
|
||||
if (authSource != null && !authSource.isBlank()) {
|
||||
return authSource;
|
||||
}
|
||||
return defaultString(stringOrNull(connObj, "database"), "admin");
|
||||
return "admin";
|
||||
}
|
||||
|
||||
private static String urlParam(String urlParams, String key) {
|
||||
|
||||
@@ -135,11 +135,11 @@ class MongoAgentTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void fallsBackToDefaultDatabaseWhenAuthSourceIsMissing() {
|
||||
void fallsBackToAdminWhenAuthSourceIsMissing() {
|
||||
JsonObject connection = new JsonObject();
|
||||
connection.addProperty("database", "gray_lite_twin_fat");
|
||||
|
||||
assertEquals("gray_lite_twin_fat", MongoAgent.authenticationDatabase(connection));
|
||||
assertEquals("admin", MongoAgent.authenticationDatabase(connection));
|
||||
}
|
||||
|
||||
// ─── TLS: configureBuilder JSON parsing ───
|
||||
|
||||
@@ -1080,7 +1080,7 @@ impl ConnectionConfig {
|
||||
}
|
||||
DatabaseType::Databend => normalize_bare_mysql_url_params(value),
|
||||
DatabaseType::Postgres | DatabaseType::Redshift => normalize_postgres_url_params(value, self.ssl),
|
||||
DatabaseType::MongoDb => normalize_mongo_url_params(value, self.ssl),
|
||||
DatabaseType::MongoDb => normalize_mongo_url_params(value, self.ssl, !self.username.trim().is_empty()),
|
||||
_ => value.trim_start_matches('?').to_string(),
|
||||
}
|
||||
}
|
||||
@@ -1170,7 +1170,7 @@ fn normalize_mysql_url_params(value: &str, force_tls: bool, accept_invalid_certs
|
||||
parts.join("&")
|
||||
}
|
||||
|
||||
fn normalize_mongo_url_params(value: &str, force_tls: bool) -> String {
|
||||
fn normalize_mongo_url_params(value: &str, force_tls: bool, default_auth_source: bool) -> String {
|
||||
let value = value.trim_start_matches('?');
|
||||
let mut parts: Vec<String> = value.split('&').filter(|part| !part.is_empty()).map(str::to_string).collect();
|
||||
|
||||
@@ -1179,6 +1179,10 @@ fn normalize_mongo_url_params(value: &str, force_tls: bool) -> String {
|
||||
parts.insert(0, "tls=true".to_string());
|
||||
}
|
||||
|
||||
if default_auth_source && !parts.iter().any(|part| url_param_key_is(part, "authSource")) {
|
||||
parts.push("authSource=admin".to_string());
|
||||
}
|
||||
|
||||
parts.join("&")
|
||||
}
|
||||
|
||||
@@ -2137,10 +2141,32 @@ mod tests {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn mongodb_form_url_without_params_does_not_force_topology_or_auth() {
|
||||
fn mongodb_form_url_without_params_defaults_auth_source_to_admin() {
|
||||
let config = mongodb_config("root", "secret", Some("admin"));
|
||||
|
||||
assert_eq!(config.connection_url(), "mongodb://root:secret@10.1.2.3:17000/admin");
|
||||
assert_eq!(config.connection_url(), "mongodb://root:secret@10.1.2.3:17000/admin?authSource=admin");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn mongodb_form_url_default_database_does_not_change_auth_source() {
|
||||
let config = mongodb_config("root", "secret", Some("app"));
|
||||
|
||||
assert_eq!(config.connection_url(), "mongodb://root:secret@10.1.2.3:17000/app?authSource=admin");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn mongodb_form_url_without_username_does_not_default_auth_source() {
|
||||
let config = mongodb_config("", "", Some("app"));
|
||||
|
||||
assert_eq!(config.connection_url(), "mongodb://10.1.2.3:17000/app");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn mongodb_form_url_preserves_explicit_auth_source() {
|
||||
let mut config = mongodb_config("root", "secret", Some("app"));
|
||||
config.url_params = Some("authSource=app".to_string());
|
||||
|
||||
assert_eq!(config.connection_url(), "mongodb://root:secret@10.1.2.3:17000/app?authSource=app");
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -2228,8 +2254,8 @@ mod tests {
|
||||
let mut config = mongodb_config("root", "secret", Some("admin"));
|
||||
config.ssl = true;
|
||||
|
||||
assert_eq!(config.connection_url(), "mongodb://root:secret@10.1.2.3:17000/admin?tls=true");
|
||||
assert_eq!(config.redacted_connection_url(), "mongodb://10.1.2.3:17000/admin?tls=true");
|
||||
assert_eq!(config.connection_url(), "mongodb://root:secret@10.1.2.3:17000/admin?tls=true&authSource=admin");
|
||||
assert_eq!(config.redacted_connection_url(), "mongodb://10.1.2.3:17000/admin?tls=true&authSource=admin");
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user