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)
}