55 "database/sql"
66 "fmt"
77 "reflect"
8+ "sync"
89 "time"
910
1011 _ "github.com/microsoft/go-mssqldb"
@@ -18,15 +19,16 @@ import (
1819
1920// MYSQLPlugin 结构体定义 MySQL 插件
2021type MSSQLPlugin struct {
21- Name string
22- AllowRemote bool
23- Configs []Body
22+ Name string
23+ AllowRemote bool
24+ LessCommonParameters string // 不常用参数 (如: encrypt=disable;trustServerCertificate=true)
25+ Configs []Body
2426}
2527
2628// getConnection 创建数据库连接
2729func (p * MSSQLPlugin ) GetConnection (body * Body ) (* sql.DB , error ) {
28- connString := fmt .Sprintf ("server=%s;port=%d;user id=%s;password=%s;database=%s" ,
29- body .Host , body .Port , body .User , body .Password , body .Database )
30+ connString := fmt .Sprintf ("server=%s;port=%d;user id=%s;password=%s;database=%s;%s " ,
31+ body .Host , body .Port , body .User , body .Password , body .Database , p . LessCommonParameters )
3032
3133 return sql .Open ("sqlserver" , connString )
3234}
@@ -98,8 +100,17 @@ func (p *MSSQLPlugin) DoSQLExecute(body *Body) (qr *QueryResult) {
98100 values := make ([]interface {}, len (columns ))
99101 for i , colType := range columnTypes {
100102 // 根据列的扫描类型创建对应的变量
101- values [i ] = reflect .New (colType .ScanType ()).Interface ()
102103 dbType := colType .DatabaseTypeName ()
104+ if colType .ScanType () == nil {
105+ logger .Log1 .WithFields (map [string ]interface {}{
106+ "column" : columns [i ],
107+ "type" : dbType ,
108+ }).Warn ("列的扫描类型为空" )
109+ var v interface {}
110+ values [i ] = & v
111+ continue
112+ }
113+ values [i ] = reflect .New (colType .ScanType ()).Interface ()
103114 // 根据数据库类型创建对应的变量
104115 switch dbType {
105116 case "DECIMAL" , "NUMERIC" , "FLOAT" , "REAL" :
@@ -168,7 +179,14 @@ func NewMSSQLPlugin() *MSSQLPlugin {
168179 }
169180}
170181
182+ var initOnce sync.Once
183+
171184func (p * MSSQLPlugin ) Init () error {
185+ initOnce .Do (func () {
186+ // 设置默认值
187+ viper .SetDefault ("auth.mssql.allow_remote" , false )
188+ })
189+
172190 // 定义一个变量来存储 SQL 配置
173191 var sqlConfigs []Body
174192
@@ -180,11 +198,13 @@ func (p *MSSQLPlugin) Init() error {
180198 p .Configs = sqlConfigs
181199
182200 p .AllowRemote = viper .GetBool ("auth.mssql.allow_remote" )
201+ p .LessCommonParameters = viper .GetString ("auth.mssql.less_common_parameters" )
183202
184203 logger .Log1 .
185204 WithField ("插件名" , p .Name ).
186205 WithField ("配置列表" , p .Configs ).
187206 WithField ("允许远程配置" , p .AllowRemote ).
207+ WithField ("不常用参数" , p .LessCommonParameters ).
188208 Info ("插件已初始化" )
189209 return nil
190210}
0 commit comments