feat: OpsxDB 桌面数据库客户端首版入库

含工作台/连库多引擎字段与 SSH·SSL、结果编辑、Redis 键浏览、
Tauri 桌面与 docs/落地页;排除本地构建产物与 sidecar 二进制。
This commit is contained in:
logan committed 2026-09-19 22:43:45 +08:00
commit f8740d27f7
240 files changed
+21625

No files matched your search

+50
View File
@@ -0,0 +1,50 @@
package db
import "strings"
// IsDangerousSQL 识别可能破坏数据的语句,供前端二次确认。
func IsDangerousSQL(sql string) bool {
s := stripSQLLead(sql)
if s == "" {
return false
}
up := strings.ToUpper(s)
for _, p := range []string{"DROP ", "DROP\t", "TRUNCATE ", "ALTER ", "GRANT ", "REVOKE "} {
if strings.HasPrefix(up, strings.TrimSpace(p)) || strings.HasPrefix(up, p) {
return true
}
}
if strings.HasPrefix(up, "DELETE") {
return !containsWhere(up)
}
if strings.HasPrefix(up, "UPDATE") {
return !containsWhere(up)
}
return false
}
func containsWhere(up string) bool {
return strings.Contains(up, " WHERE ") || strings.Contains(up, "\nWHERE ") || strings.Contains(up, "\tWHERE ")
}
func stripSQLLead(sql string) string {
s := strings.TrimSpace(sql)
for {
if strings.HasPrefix(s, "--") {
if i := strings.IndexByte(s, '\n'); i >= 0 {
s = strings.TrimSpace(s[i+1:])
continue
}
return ""
}
if strings.HasPrefix(s, "/*") {
if i := strings.Index(s, "*/"); i >= 0 {
s = strings.TrimSpace(s[i+2:])
continue
}
return ""
}
break
}
return s
}