mirror of
https://hubproxy.babadafafafafa.cn/https://github.com/1Panel-dev/1Panel.git
synced 2026-09-21 00:24:12 +08:00
98 lines
2.9 KiB
Go
98 lines
2.9 KiB
Go
package client
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
func splitHosts(permission string) []string {
|
|
hosts := strings.Split(permission, ",")
|
|
res := make([]string, 0, len(hosts))
|
|
for _, host := range hosts {
|
|
host = strings.TrimSpace(host)
|
|
if len(host) == 0 {
|
|
continue
|
|
}
|
|
res = append(res, host)
|
|
}
|
|
if len(res) == 0 {
|
|
return []string{"%"}
|
|
}
|
|
return res
|
|
}
|
|
|
|
func userIdentity(username, host string) string {
|
|
return fmt.Sprintf("'%s'@'%s'", strings.ReplaceAll(username, "'", "''"), strings.ReplaceAll(host, "'", "''"))
|
|
}
|
|
|
|
func userIdentities(username, permission string) []string {
|
|
hosts := splitHosts(permission)
|
|
users := make([]string, 0, len(hosts))
|
|
for _, host := range hosts {
|
|
users = append(users, userIdentity(username, host))
|
|
}
|
|
return users
|
|
}
|
|
|
|
func isUserExistsErr(err error) bool {
|
|
return strings.Contains(strings.ToLower(err.Error()), "error 1396")
|
|
}
|
|
|
|
func createUserSQL(user, password string) string {
|
|
return fmt.Sprintf("create user %s identified by '%s';", user, password)
|
|
}
|
|
|
|
func databaseScope(database string) string {
|
|
if database == "*" {
|
|
return "*.*"
|
|
}
|
|
return fmt.Sprintf("`%s`.*", database)
|
|
}
|
|
|
|
func grantDatabaseSQL(database, user string) string {
|
|
return fmt.Sprintf("grant all privileges on %s to %s", databaseScope(database), user)
|
|
}
|
|
|
|
func createUserGrantSQL(info CreateInfo, user string) string {
|
|
grantStr := grantDatabaseSQL(info.Name, user)
|
|
if strings.HasPrefix(info.Version, "5.7") || strings.HasPrefix(info.Version, "5.6") {
|
|
return fmt.Sprintf("%s identified by '%s' with grant option;", grantStr, info.Password)
|
|
}
|
|
return grantStr + " with grant option;"
|
|
}
|
|
|
|
func grantUserSQL(info GrantInfo) string {
|
|
return grantDatabaseSQL(info.Database, userIdentity(info.Username, info.Host)) + " with grant option;"
|
|
}
|
|
|
|
func revokeGrantSQL(info GrantInfo) string {
|
|
return fmt.Sprintf("revoke all privileges on %s from %s;", databaseScope(info.Database), userIdentity(info.Username, info.Host))
|
|
}
|
|
|
|
func revokeGrantOptionSQL(info GrantInfo) string {
|
|
return fmt.Sprintf("revoke grant option on %s from %s;", databaseScope(info.Database), userIdentity(info.Username, info.Host))
|
|
}
|
|
|
|
func dropUserSQL(info UserInfo, version string) string {
|
|
user := userIdentity(info.Username, info.Host)
|
|
if strings.HasPrefix(version, "5.6") {
|
|
return fmt.Sprintf("drop user %s", user)
|
|
}
|
|
return fmt.Sprintf("drop user if exists %s", user)
|
|
}
|
|
|
|
func renameUserSQL(info UserUpdateInfo) string {
|
|
return fmt.Sprintf("rename user %s to %s", userIdentity(info.Username, info.Host), userIdentity(info.Username, info.NewHost))
|
|
}
|
|
|
|
func dropDatabaseSQL(name string) string {
|
|
return fmt.Sprintf("drop database if exists `%s`", name)
|
|
}
|
|
|
|
func changeUserPasswordSQL(user, password, version string) string {
|
|
if strings.HasPrefix(version, "5.7") || strings.HasPrefix(version, "5.6") {
|
|
return fmt.Sprintf("set password for %s = password('%s')", user, password)
|
|
}
|
|
return fmt.Sprintf("ALTER USER %s IDENTIFIED BY '%s';", user, password)
|
|
}
|