From fae133ca6ba28fb59c0592e76a4479496a8fede1 Mon Sep 17 00:00:00 2001 From: Lingyu Song Date: Mon, 23 Mar 2020 18:44:17 +0800 Subject: [PATCH] privilege: use internal session to run `SET DEFAULT ROL ALL` (#15525) --- executor/simple.go | 7 ++++++- executor/simple_test.go | 13 +++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/executor/simple.go b/executor/simple.go index a27d82f967abc..3e40dffc1edcd 100644 --- a/executor/simple.go +++ b/executor/simple.go @@ -251,7 +251,12 @@ func (e *SimpleExec) setDefaultRoleAll(s *ast.SetDefaultRoleStmt) error { return ErrCannotUser.GenWithStackByArgs("SET DEFAULT ROLE", user.String()) } } - sqlExecutor := e.ctx.(sqlexec.SQLExecutor) + restrictedCtx, err := e.getSysSession() + if err != nil { + return err + } + defer e.releaseSysSession(restrictedCtx) + sqlExecutor := restrictedCtx.(sqlexec.SQLExecutor) if _, err := sqlExecutor.Execute(context.Background(), "begin"); err != nil { return err } diff --git a/executor/simple_test.go b/executor/simple_test.go index 2e365de48053d..5db1950220c00 100644 --- a/executor/simple_test.go +++ b/executor/simple_test.go @@ -327,6 +327,19 @@ func (s *testSuite3) TestDefaultRole(c *C) { tk.MustExec(dropRoleSQL) } +func (s *testSuite7) TestSetDefaultRoleAll(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("create user test_all;") + se, err := session.CreateSession4Test(s.store) + c.Check(err, IsNil) + defer se.Close() + c.Assert(se.Auth(&auth.UserIdentity{Username: "test_all", Hostname: "localhost"}, nil, nil), IsTrue) + + ctx := context.Background() + _, err = se.Execute(ctx, "set default role all to test_all;") + c.Assert(err, IsNil) +} + func (s *testSuite7) TestUser(c *C) { tk := testkit.NewTestKit(c, s.store) // Make sure user test not in mysql.User.