diff --git a/frontend/src/components/ConnectionModal.tsx b/frontend/src/components/ConnectionModal.tsx index 037d76b..c1f17a8 100644 --- a/frontend/src/components/ConnectionModal.tsx +++ b/frontend/src/components/ConnectionModal.tsx @@ -2101,7 +2101,7 @@ const ConnectionModal: React.FC<{ @@ -2115,6 +2115,7 @@ const ConnectionModal: React.FC<{ allowClear placeholder="自动协商" options={[ + { value: 'NONE', label: '无认证 (None)' }, { value: 'SCRAM-SHA-1', label: 'SCRAM-SHA-1' }, { value: 'SCRAM-SHA-256', label: 'SCRAM-SHA-256' }, { value: 'MONGODB-AWS', label: 'MONGODB-AWS' }, diff --git a/internal/db/mongodb_impl.go b/internal/db/mongodb_impl.go index 2e5131c..ec73c46 100644 --- a/internal/db/mongodb_impl.go +++ b/internal/db/mongodb_impl.go @@ -215,7 +215,9 @@ func (m *MongoDB) getURI(config connection.ConnectionConfig) string { hostText := strings.Join(seeds, ",") uri := fmt.Sprintf("%s://%s", scheme, hostText) - if config.User != "" { + noAuth := strings.EqualFold(strings.TrimSpace(config.MongoAuthMechanism), "NONE") + + if config.User != "" && !noAuth { var userinfo *url.Userinfo if config.Password != "" { userinfo = url.UserPassword(config.User, config.Password) @@ -236,11 +238,14 @@ func (m *MongoDB) getURI(config connection.ConnectionConfig) string { params.Set("connectTimeoutMS", strconv.Itoa(timeout*1000)) params.Set("serverSelectionTimeoutMS", strconv.Itoa(timeout*1000)) - authSource := strings.TrimSpace(config.AuthSource) - if authSource == "" { - authSource = "admin" + // 仅在有用户名且非 NONE 认证时设置 authSource + if config.User != "" && !noAuth { + authSource := strings.TrimSpace(config.AuthSource) + if authSource == "" { + authSource = "admin" + } + params.Set("authSource", authSource) } - params.Set("authSource", authSource) if replicaSet := strings.TrimSpace(config.ReplicaSet); replicaSet != "" { params.Set("replicaSet", replicaSet) @@ -248,7 +253,8 @@ func (m *MongoDB) getURI(config connection.ConnectionConfig) string { if readPreference := strings.TrimSpace(config.ReadPreference); readPreference != "" { params.Set("readPreference", readPreference) } - if authMechanism := strings.TrimSpace(config.MongoAuthMechanism); authMechanism != "" { + // NONE 表示无认证,不设置 authMechanism + if authMechanism := strings.TrimSpace(config.MongoAuthMechanism); authMechanism != "" && !noAuth { params.Set("authMechanism", authMechanism) } diff --git a/internal/db/mongodb_impl_v1.go b/internal/db/mongodb_impl_v1.go index c746431..17bf146 100644 --- a/internal/db/mongodb_impl_v1.go +++ b/internal/db/mongodb_impl_v1.go @@ -216,7 +216,9 @@ func (m *MongoDBV1) getURI(config connection.ConnectionConfig) string { hostText := strings.Join(seeds, ",") uri := fmt.Sprintf("%s://%s", scheme, hostText) - if config.User != "" { + noAuth := strings.EqualFold(strings.TrimSpace(config.MongoAuthMechanism), "NONE") + + if config.User != "" && !noAuth { var userinfo *url.Userinfo if config.Password != "" { userinfo = url.UserPassword(config.User, config.Password) @@ -237,11 +239,14 @@ func (m *MongoDBV1) getURI(config connection.ConnectionConfig) string { params.Set("connectTimeoutMS", strconv.Itoa(timeout*1000)) params.Set("serverSelectionTimeoutMS", strconv.Itoa(timeout*1000)) - authSource := strings.TrimSpace(config.AuthSource) - if authSource == "" { - authSource = "admin" + // 仅在有用户名且非 NONE 认证时设置 authSource + if config.User != "" && !noAuth { + authSource := strings.TrimSpace(config.AuthSource) + if authSource == "" { + authSource = "admin" + } + params.Set("authSource", authSource) } - params.Set("authSource", authSource) if replicaSet := strings.TrimSpace(config.ReplicaSet); replicaSet != "" { params.Set("replicaSet", replicaSet) @@ -249,7 +254,8 @@ func (m *MongoDBV1) getURI(config connection.ConnectionConfig) string { if readPreference := strings.TrimSpace(config.ReadPreference); readPreference != "" { params.Set("readPreference", readPreference) } - if authMechanism := strings.TrimSpace(config.MongoAuthMechanism); authMechanism != "" { + // NONE 表示无认证,不设置 authMechanism + if authMechanism := strings.TrimSpace(config.MongoAuthMechanism); authMechanism != "" && !noAuth { params.Set("authMechanism", authMechanism) }