提取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 {
|
||||
// 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 lowerCaseNames int
|
||||
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
|
||||
}
|
||||
// EVENT 只有全局或库级授权,不能用某一张表的权限证明完整事件列表可见。
|
||||
return requireMySQLObjectGrants(ctx, tx, normalize(name), []string{name}, grants, normalize, "EVENT", true)
|
||||
if schemaOnly {
|
||||
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 {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user