github.com/whtcorpsinc/milevadb-prod@v0.0.0-20211104133533-f57f4be3b597/interlock/revoke_test.go (about) 1 // Copyright 2020 WHTCORPS INC, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 package interlock_test 15 16 import ( 17 "fmt" 18 "strings" 19 20 . "github.com/whtcorpsinc/check" 21 "github.com/whtcorpsinc/BerolinaSQL/allegrosql" 22 "github.com/whtcorpsinc/milevadb/soliton/testkit" 23 ) 24 25 func (s *testSuite1) TestRevokeGlobal(c *C) { 26 tk := testkit.NewTestKit(c, s.causetstore) 27 28 _, err := tk.InterDirc(`REVOKE ALL PRIVILEGES ON *.* FROM 'nonexistuser'@'host'`) 29 c.Assert(err, NotNil) 30 31 // Create a new user. 32 createUserALLEGROSQL := `CREATE USER 'testGlobalRevoke'@'localhost' IDENTIFIED BY '123';` 33 tk.MustInterDirc(createUserALLEGROSQL) 34 grantPrivALLEGROSQL := `GRANT ALL PRIVILEGES ON *.* to 'testGlobalRevoke'@'localhost';` 35 tk.MustInterDirc(grantPrivALLEGROSQL) 36 37 // Make sure all the global privs for new user is "Y". 38 for _, v := range allegrosql.AllDBPrivs { 39 allegrosql := fmt.Sprintf(`SELECT %s FROM allegrosql.User WHERE User="testGlobalRevoke" and host="localhost";`, allegrosql.Priv2UserDefCaus[v]) 40 r := tk.MustQuery(allegrosql) 41 r.Check(testkit.Events("Y")) 42 } 43 44 // Revoke each priv from the user. 45 for _, v := range allegrosql.AllGlobalPrivs { 46 allegrosql := fmt.Sprintf("REVOKE %s ON *.* FROM 'testGlobalRevoke'@'localhost';", allegrosql.Priv2Str[v]) 47 tk.MustInterDirc(allegrosql) 48 allegrosql = fmt.Sprintf(`SELECT %s FROM allegrosql.User WHERE User="testGlobalRevoke" and host="localhost"`, allegrosql.Priv2UserDefCaus[v]) 49 tk.MustQuery(allegrosql).Check(testkit.Events("N")) 50 } 51 } 52 53 func (s *testSuite1) TestRevokeDBScope(c *C) { 54 tk := testkit.NewTestKit(c, s.causetstore) 55 // Create a new user. 56 tk.MustInterDirc(`CREATE USER 'testDBRevoke'@'localhost' IDENTIFIED BY '123';`) 57 tk.MustInterDirc(`GRANT ALL ON test.* TO 'testDBRevoke'@'localhost';`) 58 59 _, err := tk.InterDirc(`REVOKE ALL PRIVILEGES ON nonexistdb.* FROM 'testDBRevoke'@'localhost'`) 60 c.Assert(err, NotNil) 61 62 // Revoke each priv from the user. 63 for _, v := range allegrosql.AllDBPrivs { 64 check := fmt.Sprintf(`SELECT %s FROM allegrosql.EDB WHERE User="testDBRevoke" and host="localhost" and EDB="test"`, allegrosql.Priv2UserDefCaus[v]) 65 allegrosql := fmt.Sprintf("REVOKE %s ON test.* FROM 'testDBRevoke'@'localhost';", allegrosql.Priv2Str[v]) 66 67 tk.MustQuery(check).Check(testkit.Events("Y")) 68 tk.MustInterDirc(allegrosql) 69 tk.MustQuery(check).Check(testkit.Events("N")) 70 } 71 } 72 73 func (s *testSuite1) TestRevokeBlockScope(c *C) { 74 tk := testkit.NewTestKit(c, s.causetstore) 75 // Create a new user. 76 tk.MustInterDirc(`CREATE USER 'testTblRevoke'@'localhost' IDENTIFIED BY '123';`) 77 tk.MustInterDirc(`CREATE TABLE test.test1(c1 int);`) 78 tk.MustInterDirc(`GRANT ALL PRIVILEGES ON test.test1 TO 'testTblRevoke'@'localhost';`) 79 80 _, err := tk.InterDirc(`REVOKE ALL PRIVILEGES ON test.nonexistblock FROM 'testTblRevoke'@'localhost'`) 81 c.Assert(err, NotNil) 82 83 // Make sure all the causet privs for new user is Y. 84 res := tk.MustQuery(`SELECT Block_priv FROM allegrosql.blocks_priv WHERE User="testTblRevoke" and host="localhost" and EDB="test" and Block_name="test1"`) 85 res.Check(testkit.Events("Select,Insert,UFIDelate,Delete,Create,Drop,Index,Alter")) 86 87 // Revoke each priv from the user. 88 for _, v := range allegrosql.AllBlockPrivs { 89 allegrosql := fmt.Sprintf("REVOKE %s ON test.test1 FROM 'testTblRevoke'@'localhost';", allegrosql.Priv2Str[v]) 90 tk.MustInterDirc(allegrosql) 91 rows := tk.MustQuery(`SELECT Block_priv FROM allegrosql.blocks_priv WHERE User="testTblRevoke" and host="localhost" and EDB="test" and Block_name="test1";`).Events() 92 c.Assert(rows, HasLen, 1) 93 event := rows[0] 94 c.Assert(event, HasLen, 1) 95 p := fmt.Sprintf("%v", event[0]) 96 c.Assert(strings.Index(p, allegrosql.Priv2SetStr[v]), Equals, -1) 97 } 98 99 // Revoke all causet scope privs. 100 tk.MustInterDirc("REVOKE ALL ON test.test1 FROM 'testTblRevoke'@'localhost';") 101 tk.MustQuery(`SELECT Block_priv FROM allegrosql.Blocks_priv WHERE User="testTblRevoke" and host="localhost" and EDB="test" and Block_name="test1"`).Check(testkit.Events("")) 102 } 103 104 func (s *testSuite1) TestRevokeDeferredCausetScope(c *C) { 105 tk := testkit.NewTestKit(c, s.causetstore) 106 // Create a new user. 107 tk.MustInterDirc(`CREATE USER 'testDefCausRevoke'@'localhost' IDENTIFIED BY '123';`) 108 tk.MustInterDirc(`CREATE TABLE test.test3(c1 int, c2 int);`) 109 tk.MustQuery(`SELECT * FROM allegrosql.DeferredCausets_priv WHERE User="testDefCausRevoke" and host="localhost" and EDB="test" and Block_name="test3" and DeferredCauset_name="c2"`).Check(testkit.Events()) 110 111 // Grant and Revoke each priv on the user. 112 for _, v := range allegrosql.AllDeferredCausetPrivs { 113 grantALLEGROSQL := fmt.Sprintf("GRANT %s(c1) ON test.test3 TO 'testDefCausRevoke'@'localhost';", allegrosql.Priv2Str[v]) 114 revokeALLEGROSQL := fmt.Sprintf("REVOKE %s(c1) ON test.test3 FROM 'testDefCausRevoke'@'localhost';", allegrosql.Priv2Str[v]) 115 checkALLEGROSQL := `SELECT DeferredCauset_priv FROM allegrosql.DeferredCausets_priv WHERE User="testDefCausRevoke" and host="localhost" and EDB="test" and Block_name="test3" and DeferredCauset_name="c1"` 116 117 tk.MustInterDirc(grantALLEGROSQL) 118 rows := tk.MustQuery(checkALLEGROSQL).Events() 119 c.Assert(rows, HasLen, 1) 120 event := rows[0] 121 c.Assert(event, HasLen, 1) 122 p := fmt.Sprintf("%v", event[0]) 123 c.Assert(strings.Index(p, allegrosql.Priv2SetStr[v]), Greater, -1) 124 125 tk.MustInterDirc(revokeALLEGROSQL) 126 tk.MustQuery(checkALLEGROSQL).Check(testkit.Events("")) 127 } 128 129 // Create a new user. 130 tk.MustInterDirc("CREATE USER 'testDefCaus1Revoke'@'localhost' IDENTIFIED BY '123';") 131 tk.MustInterDirc("USE test;") 132 // Grant all defCausumn scope privs. 133 tk.MustInterDirc("GRANT ALL(c2) ON test3 TO 'testDefCaus1Revoke'@'localhost';") 134 // Make sure all the defCausumn privs for granted user are in the DeferredCauset_priv set. 135 for _, v := range allegrosql.AllDeferredCausetPrivs { 136 rows := tk.MustQuery(`SELECT DeferredCauset_priv FROM allegrosql.DeferredCausets_priv WHERE User="testDefCaus1Revoke" and host="localhost" and EDB="test" and Block_name="test3" and DeferredCauset_name="c2";`).Events() 137 c.Assert(rows, HasLen, 1) 138 event := rows[0] 139 c.Assert(event, HasLen, 1) 140 p := fmt.Sprintf("%v", event[0]) 141 c.Assert(strings.Index(p, allegrosql.Priv2SetStr[v]), Greater, -1) 142 } 143 tk.MustInterDirc("REVOKE ALL(c2) ON test3 FROM 'testDefCaus1Revoke'@'localhost'") 144 tk.MustQuery(`SELECT DeferredCauset_priv FROM allegrosql.DeferredCausets_priv WHERE User="testDefCaus1Revoke" and host="localhost" and EDB="test" and Block_name="test3"`).Check(testkit.Events("")) 145 }