From a8f4a5472326dc44dc632fbea4b02413d97c63fb Mon Sep 17 00:00:00 2001 From: xuans Date: Sun, 27 Sep 2026 23:51:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E5=8F=96MySQL=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=E5=8F=AF=E8=A7=81=E6=9D=83=E9=99=90=E6=A3=80=E6=9F=A5=E5=B9=B6?= =?UTF-8?q?=E4=BF=9D=E6=8C=81=E4=BA=8B=E4=BB=B6=E6=A0=A1=E9=AA=8C=E8=A1=8C?= =?UTF-8?q?=E4=B8=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 仅提交可独立验证的权限检查重构;其余视图备份与权限矩阵改动尚未完成,留在工作区,不包含于本提交。 在基于3cc6a7a的独立工作区仅应用本文件后验证:MySQL 5.7权限专项23个叶子用例通过,MySQL 8.0权限专项37个叶子用例通过,均无失败或跳过;CLI常规测试、go vet、go mod verify通过。 全量回归未全部通过:未改动的localreset包TestWindowsRejectsNonElevatedPeer在并行全量执行时超时,单独重跑通过。保留该异常,不将本提交视为全量或生产验收通过。 --- backend/internal/cli/mysql_privileges.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/backend/internal/cli/mysql_privileges.go b/backend/internal/cli/mysql_privileges.go index 74629db..86cd412 100644 --- a/backend/internal/cli/mysql_privileges.go +++ b/backend/internal/cli/mysql_privileges.go @@ -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 {