提取MySQL对象可见权限检查并保持事件校验行为
仅提交可独立验证的权限检查重构;其余视图备份与权限矩阵改动尚未完成,留在工作区,不包含于本提交。 在基于3cc6a7a的独立工作区仅应用本文件后验证:MySQL 5.7权限专项23个叶子用例通过,MySQL 8.0权限专项37个叶子用例通过,均无失败或跳过;CLI常规测试、go vet、go mod verify通过。 全量回归未全部通过:未改动的localreset包TestWindowsRejectsNonElevatedPeer在并行全量执行时超时,单独重跑通过。保留该异常,不将本提交视为全量或生产验收通过。
This commit is contained in:
parent
3cc6a7ac35
commit
a8f4a54723
@ -89,6 +89,11 @@ func requireMySQLTableTriggerGrants(ctx context.Context, tx *sql.Tx, name string
|
|||||||
}
|
}
|
||||||
|
|
||||||
func requireMySQLEventVisibility(ctx context.Context, tx *sql.Tx) error {
|
func requireMySQLEventVisibility(ctx context.Context, tx *sql.Tx) error {
|
||||||
|
// EVENT 只有全局或库级授权,不能用某一张表的权限证明完整事件列表可见。
|
||||||
|
return requireMySQLObjectVisibility(ctx, tx, nil, "EVENT", true)
|
||||||
|
}
|
||||||
|
|
||||||
|
func requireMySQLObjectVisibility(ctx context.Context, tx *sql.Tx, objects []string, privilege string, schemaOnly bool) error {
|
||||||
var name, version string
|
var name, version string
|
||||||
var lowerCaseNames int
|
var lowerCaseNames int
|
||||||
if err := tx.QueryRowContext(ctx, "SELECT DATABASE(), VERSION(), @@lower_case_table_names").Scan(&name, &version, &lowerCaseNames); err != nil {
|
if err := tx.QueryRowContext(ctx, "SELECT DATABASE(), VERSION(), @@lower_case_table_names").Scan(&name, &version, &lowerCaseNames); err != nil {
|
||||||
@ -104,8 +109,10 @@ func requireMySQLEventVisibility(ctx context.Context, tx *sql.Tx) error {
|
|||||||
}
|
}
|
||||||
return value
|
return value
|
||||||
}
|
}
|
||||||
// EVENT 只有全局或库级授权,不能用某一张表的权限证明完整事件列表可见。
|
if schemaOnly {
|
||||||
return requireMySQLObjectGrants(ctx, tx, normalize(name), []string{name}, grants, normalize, "EVENT", true)
|
objects = []string{name}
|
||||||
|
}
|
||||||
|
return requireMySQLObjectGrants(ctx, tx, normalize(name), objects, grants, normalize, privilege, schemaOnly)
|
||||||
}
|
}
|
||||||
|
|
||||||
func requireMySQLObjectGrants(ctx context.Context, tx *sql.Tx, name string, objects, grants []string, normalize func(string) string, privilege string, schemaOnly bool) error {
|
func requireMySQLObjectGrants(ctx context.Context, tx *sql.Tx, name string, objects, grants []string, normalize func(string) string, privilege string, schemaOnly bool) error {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user