@@ -1230,6 +1230,27 @@ var UserPrivTests = []UserPrivilegeTest{
12301230 Query : "SELECT User, Host, Select_priv FROM mysql.user WHERE User = 'tester';" ,
12311231 Expected : []sql.Row {{"tester" , "localhost" , "N" }},
12321232 },
1233+
1234+ {
1235+ // Re-revoking does nothing
1236+ User : "root" ,
1237+ Host : "localhost" ,
1238+ Query : "REVOKE SELECT ON *.* FROM tester@localhost;" ,
1239+ Expected : []sql.Row {{types .NewOkResult (0 )}},
1240+ },
1241+ {
1242+ // IF EXISTS option does nothing
1243+ User : "root" ,
1244+ Host : "localhost" ,
1245+ Query : "REVOKE IF EXISTS SELECT ON *.* FROM tester@localhost;" ,
1246+ Expected : []sql.Row {{types .NewOkResult (0 )}},
1247+ },
1248+ {
1249+ User : "root" ,
1250+ Host : "localhost" ,
1251+ Query : "SELECT User, Host, Select_priv FROM mysql.user WHERE User = 'tester';" ,
1252+ Expected : []sql.Row {{"tester" , "localhost" , "N" }},
1253+ },
12331254 },
12341255 },
12351256 {
@@ -1238,7 +1259,11 @@ var UserPrivTests = []UserPrivilegeTest{
12381259 "CREATE TABLE test (pk BIGINT PRIMARY KEY);" ,
12391260 "INSERT INTO test VALUES (1), (2), (3);" ,
12401261 "CREATE USER tester@localhost;" ,
1262+ "CREATE USER tester1@localhost;" ,
1263+ "CREATE USER tester2@localhost;" ,
12411264 "GRANT ALL ON *.* TO tester@localhost;" ,
1265+ "GRANT ALL ON *.* TO tester1@localhost WITH GRANT OPTION;" ,
1266+ "GRANT ALL ON *.* TO tester2@localhost WITH GRANT OPTION;" ,
12421267 },
12431268 Assertions : []UserPrivilegeTestAssertion {
12441269 {
@@ -1280,8 +1305,79 @@ var UserPrivTests = []UserPrivilegeTest{
12801305 {
12811306 User : "root" ,
12821307 Host : "localhost" ,
1283- Query : "SELECT User, Host, Select_priv, Insert_priv FROM mysql.user WHERE User = 'tester';" ,
1284- Expected : []sql.Row {{"tester" , "localhost" , "N" , "N" }},
1308+ Query : "SELECT User, Host, Select_priv, Insert_priv, Grant_priv FROM mysql.user WHERE User = 'tester';" ,
1309+ Expected : []sql.Row {{"tester" , "localhost" , "N" , "N" , "N" }},
1310+ },
1311+
1312+ {
1313+ User : "root" ,
1314+ Host : "localhost" ,
1315+ Query : "SELECT User, Host, Select_priv, Insert_priv, Grant_priv FROM mysql.user WHERE User = 'tester1';" ,
1316+ Expected : []sql.Row {{"tester1" , "localhost" , "Y" , "Y" , "Y" }},
1317+ },
1318+ {
1319+ User : "root" ,
1320+ Host : "localhost" ,
1321+ Query : "REVOKE ALL, GRANT OPTION FROM tester1@localhost;" ,
1322+ Expected : []sql.Row {{types .NewOkResult (0 )}},
1323+ },
1324+ {
1325+ User : "root" ,
1326+ Host : "localhost" ,
1327+ Query : "SELECT User, Host, Select_priv, Insert_priv, Grant_priv FROM mysql.user WHERE User = 'tester1';" ,
1328+ Expected : []sql.Row {{"tester1" , "localhost" , "N" , "N" , "N" }},
1329+ },
1330+
1331+ {
1332+ User : "root" ,
1333+ Host : "localhost" ,
1334+ Query : "SELECT User, Host, Select_priv, Insert_priv, Grant_priv FROM mysql.user WHERE User = 'tester2';" ,
1335+ Expected : []sql.Row {{"tester2" , "localhost" , "Y" , "Y" , "Y" }},
1336+ },
1337+ {
1338+ User : "root" ,
1339+ Host : "localhost" ,
1340+ Query : "REVOKE ALL PRIVILEGES, GRANT OPTION FROM tester2@localhost;" ,
1341+ Expected : []sql.Row {{types .NewOkResult (0 )}},
1342+ },
1343+ {
1344+ User : "root" ,
1345+ Host : "localhost" ,
1346+ Query : "SELECT User, Host, Select_priv, Insert_priv, Grant_priv FROM mysql.user WHERE User = 'tester2';" ,
1347+ Expected : []sql.Row {{"tester2" , "localhost" , "N" , "N" , "N" }},
1348+ },
1349+ {
1350+ // Re-revoking does nothing
1351+ User : "root" ,
1352+ Host : "localhost" ,
1353+ Query : "REVOKE ALL PRIVILEGES, GRANT OPTION FROM tester2@localhost;" ,
1354+ Expected : []sql.Row {{types .NewOkResult (0 )}},
1355+ },
1356+ {
1357+ // IF EXISTS does nothing
1358+ User : "root" ,
1359+ Host : "localhost" ,
1360+ Query : "REVOKE IF EXISTS ALL PRIVILEGES, GRANT OPTION FROM tester2@localhost;" ,
1361+ Expected : []sql.Row {{types .NewOkResult (0 )}},
1362+ },
1363+ {
1364+ User : "root" ,
1365+ Host : "localhost" ,
1366+ Query : "SELECT User, Host, Select_priv, Insert_priv, Grant_priv FROM mysql.user WHERE User = 'tester2';" ,
1367+ Expected : []sql.Row {{"tester2" , "localhost" , "N" , "N" , "N" }},
1368+ },
1369+ {
1370+ User : "root" ,
1371+ Host : "localhost" ,
1372+ Query : "REVOKE IF EXISTS ALL PRIVILEGES, GRANT OPTION FROM fake1@localhost, fake2@localhost, fake3@localhost;" ,
1373+ ExpectedErr : sql .ErrRevokeUserDoesNotExist ,
1374+ },
1375+ {
1376+ // TODO: check warnings
1377+ User : "root" ,
1378+ Host : "localhost" ,
1379+ Query : "REVOKE IF EXISTS ALL PRIVILEGES, GRANT OPTION FROM fake1@localhost, fake2@localhost, fake3@localhost IGNORE UNKNOWN USER;" ,
1380+ Expected : []sql.Row {{types .NewOkResult (0 )}},
12851381 },
12861382 },
12871383 },
@@ -1402,6 +1498,32 @@ var UserPrivTests = []UserPrivilegeTest{
14021498 Query : "SELECT COUNT(*) FROM mysql.user WHERE User = 'tester';" ,
14031499 Expected : []sql.Row {{1 }},
14041500 },
1501+ {
1502+ User : "root" ,
1503+ Host : "localhost" ,
1504+ Query : "REVOKE fake_role FROM tester@localhost;" ,
1505+ ExpectedErr : sql .ErrGrantRevokeRoleDoesNotExist ,
1506+ },
1507+ {
1508+ // TODO: check for warning
1509+ User : "root" ,
1510+ Host : "localhost" ,
1511+ Query : "REVOKE IF EXISTS fake_role FROM tester@localhost;" ,
1512+ Expected : []sql.Row {{types .NewOkResult (0 )}},
1513+ },
1514+ {
1515+ User : "root" ,
1516+ Host : "localhost" ,
1517+ Query : "REVOKE test_role FROM fake_user@localhost;" ,
1518+ ExpectedErr : sql .ErrGrantRevokeRoleDoesNotExist ,
1519+ },
1520+ {
1521+ // TODO: check for warning
1522+ User : "root" ,
1523+ Host : "localhost" ,
1524+ Query : "REVOKE test_role FROM fake_user@localhost IGNORE UNKNOWN USER;" ,
1525+ Expected : []sql.Row {{types .NewOkResult (0 )}},
1526+ },
14051527 },
14061528 },
14071529 {
0 commit comments