mirror of
https://github.com/acepanel/panel.git
synced 2026-02-04 11:27:17 +08:00
feat: 优化数据库信息获取
This commit is contained in:
@@ -3,7 +3,6 @@ package db
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"slices"
|
||||
"strings"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
@@ -134,7 +133,7 @@ func (m *MySQL) UserPrivileges(user, host string) (map[string][]string, error) {
|
||||
for rows.Next() {
|
||||
var grant string
|
||||
if err = rows.Scan(&grant); err != nil {
|
||||
return nil, fmt.Errorf("failed to scan grant: %w", err)
|
||||
return nil, err
|
||||
}
|
||||
if !strings.HasPrefix(grant, "GRANT ") {
|
||||
continue
|
||||
@@ -199,24 +198,35 @@ func (m *MySQL) Users() ([]types.MySQLUser, error) {
|
||||
return users, nil
|
||||
}
|
||||
|
||||
func (m *MySQL) Databases() ([]string, error) {
|
||||
rows, err := m.Query("SHOW DATABASES")
|
||||
func (m *MySQL) Databases() ([]types.MySQLDatabase, error) {
|
||||
query := `
|
||||
SELECT
|
||||
SCHEMA_NAME,
|
||||
DEFAULT_CHARACTER_SET_NAME,
|
||||
DEFAULT_COLLATION_NAME
|
||||
FROM INFORMATION_SCHEMA.SCHEMATA
|
||||
WHERE SCHEMA_NAME NOT IN ('information_schema', 'performance_schema', 'mysql', 'sys')
|
||||
`
|
||||
|
||||
rows, err := m.Query(query)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var databases []string
|
||||
var databases []types.MySQLDatabase
|
||||
for rows.Next() {
|
||||
var database string
|
||||
if err := rows.Scan(&database); err != nil {
|
||||
continue
|
||||
var db types.MySQLDatabase
|
||||
if err = rows.Scan(&db.Name, &db.CharSet, &db.Collation); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if slices.Contains([]string{"information_schema", "performance_schema", "mysql", "sys"}, database) {
|
||||
continue
|
||||
}
|
||||
databases = append(databases, database)
|
||||
databases = append(databases, db)
|
||||
}
|
||||
|
||||
if err = rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return databases, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ package db
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"slices"
|
||||
"strings"
|
||||
|
||||
_ "github.com/lib/pq"
|
||||
@@ -128,7 +129,7 @@ func (r *Postgres) UserPrivileges(user string) (map[string][]string, error) {
|
||||
|
||||
rows, err := r.Query(query, user)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to query database privileges: %w", err)
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
@@ -136,8 +137,8 @@ func (r *Postgres) UserPrivileges(user string) (map[string][]string, error) {
|
||||
|
||||
for rows.Next() {
|
||||
var db, privilegeStr string
|
||||
if err := rows.Scan(&db, &privilegeStr); err != nil {
|
||||
return nil, fmt.Errorf("failed to scan row: %w", err)
|
||||
if err = rows.Scan(&db, &privilegeStr); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
privileges[db] = strings.Split(privilegeStr, ",")
|
||||
@@ -236,6 +237,9 @@ func (r *Postgres) Databases() ([]types.PostgresDatabase, error) {
|
||||
if err := rows.Scan(&db.Name, &db.Owner, &db.Encoding); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if slices.Contains([]string{"template0", "template1", "postgres"}, db.Name) {
|
||||
continue
|
||||
}
|
||||
databases = append(databases, db)
|
||||
}
|
||||
|
||||
|
||||
@@ -5,3 +5,9 @@ type MySQLUser struct {
|
||||
Host string `json:"host"`
|
||||
Grants []string `json:"grants"`
|
||||
}
|
||||
|
||||
type MySQLDatabase struct {
|
||||
Name string `json:"name"`
|
||||
CharSet string `json:"char_set"`
|
||||
Collation string `json:"collation"`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user