From 6271d1c80b2698d84ba90a146ff5034f9841b00b Mon Sep 17 00:00:00 2001 From: Xiaoguang Sun Date: Wed, 20 Sep 2023 10:34:42 +0800 Subject: [PATCH] executor: Escape object in show grants output (#46976) close pingcap/tidb#46975 --- executor/test/showtest/show_test.go | 4 +- executor/test/simpletest/simple_test.go | 6 +- privilege/privileges/cache.go | 16 ++-- privilege/privileges/privileges.go | 2 +- privilege/privileges/privileges_test.go | 102 +++++++++++++++--------- server/tests/tidb_test.go | 22 ++--- 6 files changed, 92 insertions(+), 60 deletions(-) diff --git a/executor/test/showtest/show_test.go b/executor/test/showtest/show_test.go index 607806ef1c61a..16fa29789684e 100644 --- a/executor/test/showtest/show_test.go +++ b/executor/test/showtest/show_test.go @@ -917,8 +917,8 @@ func TestIssue10549(t *testing.T) { require.NoError(t, tk.Session().Auth(&auth.UserIdentity{Username: "dev", Hostname: "%", AuthUsername: "dev", AuthHostname: "%"}, nil, nil, nil)) tk.MustQuery("SHOW DATABASES;").Check(testkit.Rows("INFORMATION_SCHEMA", "newdb")) - tk.MustQuery("SHOW GRANTS;").Check(testkit.Rows("GRANT USAGE ON *.* TO 'dev'@'%'", "GRANT ALL PRIVILEGES ON newdb.* TO 'dev'@'%'", "GRANT 'app_developer'@'%' TO 'dev'@'%'")) - tk.MustQuery("SHOW GRANTS FOR CURRENT_USER").Check(testkit.Rows("GRANT USAGE ON *.* TO 'dev'@'%'", "GRANT ALL PRIVILEGES ON newdb.* TO 'dev'@'%'", "GRANT 'app_developer'@'%' TO 'dev'@'%'")) + tk.MustQuery("SHOW GRANTS;").Check(testkit.Rows("GRANT USAGE ON *.* TO 'dev'@'%'", "GRANT ALL PRIVILEGES ON `newdb`.* TO 'dev'@'%'", "GRANT 'app_developer'@'%' TO 'dev'@'%'")) + tk.MustQuery("SHOW GRANTS FOR CURRENT_USER").Check(testkit.Rows("GRANT USAGE ON *.* TO 'dev'@'%'", "GRANT ALL PRIVILEGES ON `newdb`.* TO 'dev'@'%'", "GRANT 'app_developer'@'%' TO 'dev'@'%'")) tk.MustQuery("SHOW GRANTS FOR dev").Check(testkit.Rows("GRANT USAGE ON *.* TO 'dev'@'%'", "GRANT 'app_developer'@'%' TO 'dev'@'%'")) } diff --git a/executor/test/simpletest/simple_test.go b/executor/test/simpletest/simple_test.go index a941b4609a68b..badb1821f88b0 100644 --- a/executor/test/simpletest/simple_test.go +++ b/executor/test/simpletest/simple_test.go @@ -264,9 +264,9 @@ func TestPrivilegesAfterDropUser(t *testing.T) { tk.Session().Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil, nil) tk.MustQuery("SHOW GRANTS FOR u1").Check(testkit.Rows( "GRANT USAGE ON *.* TO 'u1'@'%'", - "GRANT CREATE ON test.* TO 'u1'@'%'", - "GRANT UPDATE ON test.t1 TO 'u1'@'%'", - "GRANT SELECT(v), UPDATE(v) ON test.t1 TO 'u1'@'%'", + "GRANT CREATE ON `test`.* TO 'u1'@'%'", + "GRANT UPDATE ON `test`.`t1` TO 'u1'@'%'", + "GRANT SELECT(v), UPDATE(v) ON `test`.`t1` TO 'u1'@'%'", "GRANT SYSTEM_VARIABLES_ADMIN ON *.* TO 'u1'@'%'", )) diff --git a/privilege/privileges/cache.go b/privilege/privileges/cache.go index da38ce619ae42..eb89926ad7eb3 100644 --- a/privilege/privileges/cache.go +++ b/privilege/privileges/cache.go @@ -1247,7 +1247,7 @@ func (p *MySQLPrivilege) DBIsVisible(user, host, db string) bool { return false } -func (p *MySQLPrivilege) showGrants(user, host string, roles []*auth.RoleIdentity) []string { +func (p *MySQLPrivilege) showGrants(ctx sessionctx.Context, user, host string, roles []*auth.RoleIdentity) []string { var gs []string //nolint: prealloc var sortFromIdx int var hasGlobalGrant = false @@ -1319,7 +1319,10 @@ func (p *MySQLPrivilege) showGrants(user, host string, roles []*auth.RoleIdentit } } } + + sqlMode := ctx.GetSessionVars().SQLMode for dbName, priv := range dbPrivTable { + dbName = stringutil.Escape(dbName, sqlMode) g := dbPrivToString(priv) if len(g) > 0 { var s string @@ -1342,7 +1345,7 @@ func (p *MySQLPrivilege) showGrants(user, host string, roles []*auth.RoleIdentit sortFromIdx = len(gs) tablePrivTable := make(map[string]mysql.PrivilegeType) for _, record := range p.TablesPriv { - recordKey := record.DB + "." + record.TableName + recordKey := stringutil.Escape(record.DB, sqlMode) + "." + stringutil.Escape(record.TableName, sqlMode) if user == record.User && host == record.Host { tablePrivTable[recordKey] |= record.TablePriv } else { @@ -1378,9 +1381,9 @@ func (p *MySQLPrivilege) showGrants(user, host string, roles []*auth.RoleIdentit columnPrivTable := make(map[string]privOnColumns) for i := range p.ColumnsPriv { record := p.ColumnsPriv[i] - if !collectColumnGrant(&record, user, host, columnPrivTable) { + if !collectColumnGrant(&record, user, host, columnPrivTable, sqlMode) { for _, r := range allRoles { - collectColumnGrant(&record, r.Username, r.Hostname, columnPrivTable) + collectColumnGrant(&record, r.Username, r.Hostname, columnPrivTable, sqlMode) } } } @@ -1491,9 +1494,10 @@ func privOnColumnsToString(p privOnColumns) string { return buf.String() } -func collectColumnGrant(record *columnsPrivRecord, user, host string, columnPrivTable map[string]privOnColumns) bool { +func collectColumnGrant(record *columnsPrivRecord, user, host string, columnPrivTable map[string]privOnColumns, sqlMode mysql.SQLMode) bool { if record.baseRecord.match(user, host) { - recordKey := record.DB + "." + record.TableName + recordKey := stringutil.Escape(record.DB, sqlMode) + "." + stringutil.Escape(record.TableName, sqlMode) + privColumns, ok := columnPrivTable[recordKey] if !ok { privColumns = make(map[mysql.PrivilegeType]columnStrs) diff --git a/privilege/privileges/privileges.go b/privilege/privileges/privileges.go index 52548ebd89f00..4c75f847d0cae 100644 --- a/privilege/privileges/privileges.go +++ b/privilege/privileges/privileges.go @@ -842,7 +842,7 @@ func (p *UserPrivileges) ShowGrants(ctx sessionctx.Context, user *auth.UserIdent u = user.AuthUsername h = user.AuthHostname } - grants = mysqlPrivilege.showGrants(u, h, roles) + grants = mysqlPrivilege.showGrants(ctx, u, h, roles) if len(grants) == 0 { err = ErrNonexistingGrant.GenWithStackByArgs(u, h) } diff --git a/privilege/privileges/privileges_test.go b/privilege/privileges/privileges_test.go index 194870c5ae778..4e699e4cf3998 100644 --- a/privilege/privileges/privileges_test.go +++ b/privilege/privileges/privileges_test.go @@ -295,7 +295,7 @@ func TestShowGrants(t *testing.T) { require.NoError(t, err) require.Len(t, gs, 2) expected := []string{`GRANT ALL PRIVILEGES ON *.* TO 'show'@'localhost'`, - `GRANT SELECT ON test.* TO 'show'@'localhost'`} + "GRANT SELECT ON `test`.* TO 'show'@'localhost'"} require.True(t, testutil.CompareUnorderedStringSlice(gs, expected), fmt.Sprintf("gs: %v, expected: %v", gs, expected)) tk.MustExec(`GRANT Index ON test1.* TO 'show'@'localhost';`) @@ -303,8 +303,8 @@ func TestShowGrants(t *testing.T) { require.NoError(t, err) require.Len(t, gs, 3) expected = []string{`GRANT ALL PRIVILEGES ON *.* TO 'show'@'localhost'`, - `GRANT SELECT ON test.* TO 'show'@'localhost'`, - `GRANT INDEX ON test1.* TO 'show'@'localhost'`} + "GRANT SELECT ON `test`.* TO 'show'@'localhost'", + "GRANT INDEX ON `test1`.* TO 'show'@'localhost'"} require.True(t, testutil.CompareUnorderedStringSlice(gs, expected), fmt.Sprintf("gs: %v, expected: %v", gs, expected)) // Add another db privilege to the same db and test again. @@ -313,8 +313,8 @@ func TestShowGrants(t *testing.T) { require.NoError(t, err) require.Len(t, gs, 3) expected = []string{`GRANT ALL PRIVILEGES ON *.* TO 'show'@'localhost'`, - `GRANT SELECT ON test.* TO 'show'@'localhost'`, - `GRANT DELETE,INDEX ON test1.* TO 'show'@'localhost'`} + "GRANT SELECT ON `test`.* TO 'show'@'localhost'", + "GRANT DELETE,INDEX ON `test1`.* TO 'show'@'localhost'"} require.True(t, testutil.CompareUnorderedStringSlice(gs, expected), fmt.Sprintf("gs: %v, expected: %v", gs, expected)) tk.MustExec(`GRANT ALL ON test1.* TO 'show'@'localhost';`) @@ -322,8 +322,8 @@ func TestShowGrants(t *testing.T) { require.NoError(t, err) require.Len(t, gs, 3) expected = []string{`GRANT ALL PRIVILEGES ON *.* TO 'show'@'localhost'`, - `GRANT SELECT ON test.* TO 'show'@'localhost'`, - `GRANT ALL PRIVILEGES ON test1.* TO 'show'@'localhost'`} + "GRANT SELECT ON `test`.* TO 'show'@'localhost'", + "GRANT ALL PRIVILEGES ON `test1`.* TO 'show'@'localhost'"} require.True(t, testutil.CompareUnorderedStringSlice(gs, expected), fmt.Sprintf("gs: %v, expected: %v", gs, expected)) // Add table scope privileges @@ -332,9 +332,9 @@ func TestShowGrants(t *testing.T) { require.NoError(t, err) require.Len(t, gs, 4) expected = []string{`GRANT ALL PRIVILEGES ON *.* TO 'show'@'localhost'`, - `GRANT SELECT ON test.* TO 'show'@'localhost'`, - `GRANT ALL PRIVILEGES ON test1.* TO 'show'@'localhost'`, - `GRANT UPDATE ON test.test TO 'show'@'localhost'`} + "GRANT SELECT ON `test`.* TO 'show'@'localhost'", + "GRANT ALL PRIVILEGES ON `test1`.* TO 'show'@'localhost'", + "GRANT UPDATE ON `test`.`test` TO 'show'@'localhost'"} require.True(t, testutil.CompareUnorderedStringSlice(gs, expected), fmt.Sprintf("gs: %v, expected: %v", gs, expected)) // Revoke the db privilege of `test` and test again. See issue #30855. @@ -343,8 +343,8 @@ func TestShowGrants(t *testing.T) { require.NoError(t, err) require.Len(t, gs, 3) expected = []string{`GRANT ALL PRIVILEGES ON *.* TO 'show'@'localhost'`, - `GRANT ALL PRIVILEGES ON test1.* TO 'show'@'localhost'`, - `GRANT UPDATE ON test.test TO 'show'@'localhost'`} + "GRANT ALL PRIVILEGES ON `test1`.* TO 'show'@'localhost'", + "GRANT UPDATE ON `test`.`test` TO 'show'@'localhost'"} require.True(t, testutil.CompareUnorderedStringSlice(gs, expected), fmt.Sprintf("gs: %v, expected: %v", gs, expected)) // Add another table privilege and test again. @@ -353,8 +353,8 @@ func TestShowGrants(t *testing.T) { require.NoError(t, err) require.Len(t, gs, 3) expected = []string{`GRANT ALL PRIVILEGES ON *.* TO 'show'@'localhost'`, - `GRANT ALL PRIVILEGES ON test1.* TO 'show'@'localhost'`, - `GRANT SELECT,UPDATE ON test.test TO 'show'@'localhost'`} + "GRANT ALL PRIVILEGES ON `test1`.* TO 'show'@'localhost'", + "GRANT SELECT,UPDATE ON `test`.`test` TO 'show'@'localhost'"} require.True(t, testutil.CompareUnorderedStringSlice(gs, expected), fmt.Sprintf("gs: %v, expected: %v", gs, expected)) // Expected behavior: Usage still exists after revoking all privileges @@ -455,7 +455,7 @@ func TestShowColumnGrants(t *testing.T) { pc := privilege.GetPrivilegeManager(tk.Session()) gs, err := pc.ShowGrants(tk.Session(), &auth.UserIdentity{Username: "column", Hostname: "%"}, nil) require.NoError(t, err) - require.Equal(t, "GRANT USAGE ON *.* TO 'column'@'%' GRANT SELECT(a), INSERT(c), UPDATE(a, b) ON test.column_table TO 'column'@'%'", strings.Join(gs, " ")) + require.Equal(t, "GRANT USAGE ON *.* TO 'column'@'%' GRANT SELECT(a), INSERT(c), UPDATE(a, b) ON `test`.`column_table` TO 'column'@'%'", strings.Join(gs, " ")) } func TestDropTablePrivileges(t *testing.T) { @@ -2315,7 +2315,7 @@ func TestGrantOptionAndRevoke(t *testing.T) { Hostname: "localhost", }, nil, nil, nil) - tk.MustQuery(`SHOW GRANTS FOR u1`).Check(testkit.Rows("GRANT SELECT ON *.* TO 'u1'@'%' WITH GRANT OPTION", "GRANT UPDATE,DELETE ON db.* TO 'u1'@'%'")) + tk.MustQuery(`SHOW GRANTS FOR u1`).Check(testkit.Rows("GRANT SELECT ON *.* TO 'u1'@'%' WITH GRANT OPTION", "GRANT UPDATE,DELETE ON `db`.* TO 'u1'@'%'")) tk.MustExec("GRANT SELECT ON d1.* to u2") tk.MustExec("GRANT SELECT ON d2.* to u2 WITH GRANT OPTION") @@ -2323,18 +2323,18 @@ func TestGrantOptionAndRevoke(t *testing.T) { tk.MustExec("GRANT SELECT ON d4.* to u2") tk.MustExec("GRANT SELECT ON d5.* to u2") tk.MustQuery(`SHOW GRANTS FOR u2;`).Sort().Check(testkit.Rows( - "GRANT SELECT ON d1.* TO 'u2'@'%'", - "GRANT SELECT ON d2.* TO 'u2'@'%' WITH GRANT OPTION", - "GRANT SELECT ON d3.* TO 'u2'@'%'", - "GRANT SELECT ON d4.* TO 'u2'@'%'", - "GRANT SELECT ON d5.* TO 'u2'@'%'", + "GRANT SELECT ON `d1`.* TO 'u2'@'%'", + "GRANT SELECT ON `d2`.* TO 'u2'@'%' WITH GRANT OPTION", + "GRANT SELECT ON `d3`.* TO 'u2'@'%'", + "GRANT SELECT ON `d4`.* TO 'u2'@'%'", + "GRANT SELECT ON `d5`.* TO 'u2'@'%'", "GRANT USAGE ON *.* TO 'u2'@'%'", )) tk.MustExec("grant all on hchwang.* to u3 with grant option") - tk.MustQuery(`SHOW GRANTS FOR u3;`).Check(testkit.Rows("GRANT USAGE ON *.* TO 'u3'@'%'", "GRANT ALL PRIVILEGES ON hchwang.* TO 'u3'@'%' WITH GRANT OPTION")) + tk.MustQuery(`SHOW GRANTS FOR u3;`).Check(testkit.Rows("GRANT USAGE ON *.* TO 'u3'@'%'", "GRANT ALL PRIVILEGES ON `hchwang`.* TO 'u3'@'%' WITH GRANT OPTION")) tk.MustExec("revoke all on hchwang.* from u3") - tk.MustQuery(`SHOW GRANTS FOR u3;`).Check(testkit.Rows("GRANT USAGE ON *.* TO 'u3'@'%'", "GRANT USAGE ON hchwang.* TO 'u3'@'%' WITH GRANT OPTION")) + tk.MustQuery(`SHOW GRANTS FOR u3;`).Check(testkit.Rows("GRANT USAGE ON *.* TO 'u3'@'%'", "GRANT USAGE ON `hchwang`.* TO 'u3'@'%' WITH GRANT OPTION")) // Same again but with column privileges. @@ -2344,8 +2344,8 @@ func TestGrantOptionAndRevoke(t *testing.T) { tk.MustExec("revoke all on test.testgrant from u3") tk.MustQuery(`SHOW GRANTS FOR u3`).Sort().Check(testkit.Rows( "GRANT USAGE ON *.* TO 'u3'@'%'", - "GRANT USAGE ON hchwang.* TO 'u3'@'%' WITH GRANT OPTION", - "GRANT USAGE ON test.testgrant TO 'u3'@'%' WITH GRANT OPTION", + "GRANT USAGE ON `hchwang`.* TO 'u3'@'%' WITH GRANT OPTION", + "GRANT USAGE ON `test`.`testgrant` TO 'u3'@'%' WITH GRANT OPTION", )) } @@ -2382,8 +2382,8 @@ func TestGrantReferences(t *testing.T) { }, nil, nil, nil) tk.MustQuery("SHOW GRANTS FOR referencesUser").Check(testkit.Rows( `GRANT REFERENCES ON *.* TO 'referencesUser'@'%'`, - `GRANT REFERENCES ON reftestdb.* TO 'referencesUser'@'%'`, - `GRANT REFERENCES ON reftestdb.reftest TO 'referencesUser'@'%'`)) + "GRANT REFERENCES ON `reftestdb`.* TO 'referencesUser'@'%'", + "GRANT REFERENCES ON `reftestdb`.`reftest` TO 'referencesUser'@'%'")) tk.MustExec("DROP USER referencesUser") tk.MustExec("DROP SCHEMA reftestdb") } @@ -2535,7 +2535,7 @@ func TestGrantLockTables(t *testing.T) { }, nil, nil, nil) tk.MustQuery("SHOW GRANTS FOR lock_tables_user").Check(testkit.Rows( `GRANT LOCK TABLES ON *.* TO 'lock_tables_user'@'%'`, - `GRANT LOCK TABLES ON lock_tables_db.* TO 'lock_tables_user'@'%'`)) + "GRANT LOCK TABLES ON `lock_tables_db`.* TO 'lock_tables_user'@'%'")) tk.MustExec("DROP USER lock_tables_user") tk.MustExec("DROP DATABASE lock_tables_db") } @@ -2576,16 +2576,16 @@ func TestShowGrantsForCurrentUserUsingRole(t *testing.T) { tk.MustQuery("SHOW GRANTS FOR current_user() USING otherrole;").Check(testkit.Rows( "GRANT USAGE ON *.* TO 'joe'@'%'", - "GRANT SELECT ON test.* TO 'joe'@'%'", - "GRANT UPDATE ON role.* TO 'joe'@'%'", - "GRANT SELECT,DELETE ON mysql.user TO 'joe'@'%'", + "GRANT SELECT ON `test`.* TO 'joe'@'%'", + "GRANT UPDATE ON `role`.* TO 'joe'@'%'", + "GRANT SELECT,DELETE ON `mysql`.`user` TO 'joe'@'%'", "GRANT 'admins'@'%', 'engineering'@'%', 'otherrole'@'%' TO 'joe'@'%'", )) tk.MustQuery("SHOW GRANTS FOR joe USING otherrole;").Check(testkit.Rows( "GRANT USAGE ON *.* TO 'joe'@'%'", - "GRANT SELECT ON test.* TO 'joe'@'%'", - "GRANT UPDATE ON role.* TO 'joe'@'%'", - "GRANT SELECT,DELETE ON mysql.user TO 'joe'@'%'", + "GRANT SELECT ON `test`.* TO 'joe'@'%'", + "GRANT UPDATE ON `role`.* TO 'joe'@'%'", + "GRANT SELECT,DELETE ON `mysql`.`user` TO 'joe'@'%'", "GRANT 'admins'@'%', 'engineering'@'%', 'otherrole'@'%' TO 'joe'@'%'", )) } @@ -2703,7 +2703,7 @@ func TestGrantCreateTmpTables(t *testing.T) { }, nil, nil, nil) tk.MustQuery("SHOW GRANTS FOR u1").Check(testkit.Rows( `GRANT CREATE TEMPORARY TABLES ON *.* TO 'u1'@'%'`, - `GRANT CREATE TEMPORARY TABLES ON create_tmp_table_db.* TO 'u1'@'%'`)) + "GRANT CREATE TEMPORARY TABLES ON `create_tmp_table_db`.* TO 'u1'@'%'")) tk.MustExec("DROP USER u1") tk.MustExec("DROP DATABASE create_tmp_table_db") } @@ -2899,7 +2899,7 @@ func TestGrantEvent(t *testing.T) { }, nil, nil, nil) tk.MustQuery("SHOW GRANTS FOR u1").Check(testkit.Rows( `GRANT EVENT ON *.* TO 'u1'@'%'`, - `GRANT EVENT ON event_db.* TO 'u1'@'%'`)) + "GRANT EVENT ON `event_db`.* TO 'u1'@'%'")) tk.MustExec("DROP USER u1") tk.MustExec("DROP DATABASE event_db") } @@ -2923,7 +2923,7 @@ func TestGrantRoutine(t *testing.T) { }, nil, nil, nil) tk.MustQuery("SHOW GRANTS FOR u1").Check(testkit.Rows( `GRANT CREATE ROUTINE,ALTER ROUTINE ON *.* TO 'u1'@'%'`, - `GRANT CREATE ROUTINE,ALTER ROUTINE ON routine_db.* TO 'u1'@'%'`)) + "GRANT CREATE ROUTINE,ALTER ROUTINE ON `routine_db`.* TO 'u1'@'%'")) tk.MustExec("DROP USER u1") tk.MustExec("DROP DATABASE routine_db") } @@ -3279,3 +3279,31 @@ func TestNilHandleInConnectionVerification(t *testing.T) { tk := testkit.NewTestKit(t, store) require.NoError(t, tk.Session().Auth(&auth.UserIdentity{Username: "root", Hostname: `%`}, nil, nil, nil)) } + +func testShowGrantsSQLMode(t *testing.T, tk *testkit.TestKit, expected []string) { + pc := privilege.GetPrivilegeManager(tk.Session()) + gs, err := pc.ShowGrants(tk.Session(), &auth.UserIdentity{Username: "show_sql_mode", Hostname: "localhost"}, nil) + require.NoError(t, err) + require.Len(t, gs, 2) + require.True(t, testutil.CompareUnorderedStringSlice(gs, expected), fmt.Sprintf("gs: %v, expected: %v", gs, expected)) +} + +func TestShowGrantsSQLMode(t *testing.T) { + store := createStoreAndPrepareDB(t) + + tk := testkit.NewTestKit(t, store) + ctx, _ := tk.Session().(sessionctx.Context) + tk.MustExec(`CREATE USER 'show_sql_mode'@'localhost' identified by '123';`) + tk.MustExec(`GRANT Select ON test.* TO 'show_sql_mode'@'localhost';`) + + testShowGrantsSQLMode(t, tk, []string{ + "GRANT USAGE ON *.* TO 'show_sql_mode'@'localhost'", + "GRANT SELECT ON `test`.* TO 'show_sql_mode'@'localhost'", + }) + + ctx.GetSessionVars().SQLMode = mysql.SetSQLMode(ctx.GetSessionVars().SQLMode, mysql.ModeANSIQuotes) + testShowGrantsSQLMode(t, tk, []string{ + "GRANT USAGE ON *.* TO 'show_sql_mode'@'localhost'", + "GRANT SELECT ON \"test\".* TO 'show_sql_mode'@'localhost'", + }) +} diff --git a/server/tests/tidb_test.go b/server/tests/tidb_test.go index bfffb1c809ea4..984c58b4c152d 100644 --- a/server/tests/tidb_test.go +++ b/server/tests/tidb_test.go @@ -511,7 +511,7 @@ func TestSocketAndIp(t *testing.T) { // NOTICE: this is not compatible with MySQL! (MySQL would report user1@localhost also for 127.0.0.1) cli.CheckRows(t, rows, "user1@127.0.0.1") rows = dbt.MustQuery("show grants") - cli.CheckRows(t, rows, "GRANT USAGE ON *.* TO 'user1'@'%'\nGRANT SELECT ON test.* TO 'user1'@'%'") + cli.CheckRows(t, rows, "GRANT USAGE ON *.* TO 'user1'@'%'\nGRANT SELECT ON `test`.* TO 'user1'@'%'") rows = dbt.MustQuery("select host from information_schema.processlist where user = 'user1'") records := cli.Rows(t, rows) require.Contains(t, records[0], ":", "Missing : in is.processlist") @@ -527,7 +527,7 @@ func TestSocketAndIp(t *testing.T) { rows := dbt.MustQuery("select user()") cli.CheckRows(t, rows, "user1@localhost") rows = dbt.MustQuery("show grants") - cli.CheckRows(t, rows, "GRANT USAGE ON *.* TO 'user1'@'%'\nGRANT SELECT ON test.* TO 'user1'@'%'") + cli.CheckRows(t, rows, "GRANT USAGE ON *.* TO 'user1'@'%'\nGRANT SELECT ON `test`.* TO 'user1'@'%'") }) // Setup user1@127.0.0.1 for loop back network interface access @@ -554,7 +554,7 @@ func TestSocketAndIp(t *testing.T) { // NOTICE: this is not compatible with MySQL! (MySQL would report user1@localhost also for 127.0.0.1) cli.CheckRows(t, rows, "user1@127.0.0.1") rows = dbt.MustQuery("show grants") - cli.CheckRows(t, rows, "GRANT USAGE ON *.* TO 'user1'@'127.0.0.1'\nGRANT SELECT,INSERT ON test.* TO 'user1'@'127.0.0.1'") + cli.CheckRows(t, rows, "GRANT USAGE ON *.* TO 'user1'@'127.0.0.1'\nGRANT SELECT,INSERT ON `test`.* TO 'user1'@'127.0.0.1'") }) // Test with unix domain socket file connection with all hosts cli.RunTests(t, func(config *mysql.Config) { @@ -567,7 +567,7 @@ func TestSocketAndIp(t *testing.T) { rows := dbt.MustQuery("select user()") cli.CheckRows(t, rows, "user1@localhost") rows = dbt.MustQuery("show grants") - cli.CheckRows(t, rows, "GRANT USAGE ON *.* TO 'user1'@'%'\nGRANT SELECT ON test.* TO 'user1'@'%'") + cli.CheckRows(t, rows, "GRANT USAGE ON *.* TO 'user1'@'%'\nGRANT SELECT ON `test`.* TO 'user1'@'%'") }) // Setup user1@localhost for socket (and if MySQL compatible; loop back network interface access) @@ -596,7 +596,7 @@ func TestSocketAndIp(t *testing.T) { cli.CheckRows(t, rows, "user1@127.0.0.1") require.NoError(t, rows.Close()) rows = dbt.MustQuery("show grants") - cli.CheckRows(t, rows, "GRANT USAGE ON *.* TO 'user1'@'127.0.0.1'\nGRANT SELECT,INSERT ON test.* TO 'user1'@'127.0.0.1'") + cli.CheckRows(t, rows, "GRANT USAGE ON *.* TO 'user1'@'127.0.0.1'\nGRANT SELECT,INSERT ON `test`.* TO 'user1'@'127.0.0.1'") require.NoError(t, rows.Close()) }) // Test with unix domain socket file connection with all hosts @@ -611,7 +611,7 @@ func TestSocketAndIp(t *testing.T) { cli.CheckRows(t, rows, "user1@localhost") require.NoError(t, rows.Close()) rows = dbt.MustQuery("show grants") - cli.CheckRows(t, rows, "GRANT USAGE ON *.* TO 'user1'@'localhost'\nGRANT SELECT,INSERT,UPDATE,DELETE ON test.* TO 'user1'@'localhost'") + cli.CheckRows(t, rows, "GRANT USAGE ON *.* TO 'user1'@'localhost'\nGRANT SELECT,INSERT,UPDATE,DELETE ON `test`.* TO 'user1'@'localhost'") require.NoError(t, rows.Close()) }) } @@ -699,7 +699,7 @@ func TestOnlySocket(t *testing.T) { cli.CheckRows(t, rows, "user1@localhost") require.NoError(t, rows.Close()) rows = dbt.MustQuery("show grants") - cli.CheckRows(t, rows, "GRANT USAGE ON *.* TO 'user1'@'%'\nGRANT SELECT ON test.* TO 'user1'@'%'") + cli.CheckRows(t, rows, "GRANT USAGE ON *.* TO 'user1'@'%'\nGRANT SELECT ON `test`.* TO 'user1'@'%'") require.NoError(t, rows.Close()) }) @@ -733,7 +733,7 @@ func TestOnlySocket(t *testing.T) { cli.CheckRows(t, rows, "user1@localhost") require.NoError(t, rows.Close()) rows = dbt.MustQuery("show grants") - cli.CheckRows(t, rows, "GRANT USAGE ON *.* TO 'user1'@'%'\nGRANT SELECT ON test.* TO 'user1'@'%'") + cli.CheckRows(t, rows, "GRANT USAGE ON *.* TO 'user1'@'%'\nGRANT SELECT ON `test`.* TO 'user1'@'%'") require.NoError(t, rows.Close()) }) @@ -766,7 +766,7 @@ func TestOnlySocket(t *testing.T) { cli.CheckRows(t, rows, "user1@localhost") require.NoError(t, rows.Close()) rows = dbt.MustQuery("show grants") - cli.CheckRows(t, rows, "GRANT USAGE ON *.* TO 'user1'@'localhost'\nGRANT SELECT,INSERT,UPDATE,DELETE ON test.* TO 'user1'@'localhost'") + cli.CheckRows(t, rows, "GRANT USAGE ON *.* TO 'user1'@'localhost'\nGRANT SELECT,INSERT,UPDATE,DELETE ON `test`.* TO 'user1'@'localhost'") require.NoError(t, rows.Close()) }) } @@ -2563,7 +2563,7 @@ func TestLocalhostClientMapping(t *testing.T) { cli.CheckRows(t, rows, "localhostuser@127.0.0.1") require.NoError(t, rows.Close()) rows = dbt.MustQuery("show grants") - cli.CheckRows(t, rows, "GRANT USAGE ON *.* TO 'localhostuser'@'localhost'\nGRANT SELECT,UPDATE ON test.* TO 'localhostuser'@'localhost'") + cli.CheckRows(t, rows, "GRANT USAGE ON *.* TO 'localhostuser'@'localhost'\nGRANT SELECT,UPDATE ON `test`.* TO 'localhostuser'@'localhost'") require.NoError(t, rows.Close()) }) @@ -2582,7 +2582,7 @@ func TestLocalhostClientMapping(t *testing.T) { cli.CheckRows(t, rows, "localhostuser@localhost") require.NoError(t, rows.Close()) rows = dbt.MustQuery("show grants") - cli.CheckRows(t, rows, "GRANT USAGE ON *.* TO 'localhostuser'@'%'\nGRANT SELECT ON test.* TO 'localhostuser'@'%'") + cli.CheckRows(t, rows, "GRANT USAGE ON *.* TO 'localhostuser'@'%'\nGRANT SELECT ON `test`.* TO 'localhostuser'@'%'") require.NoError(t, rows.Close()) })