polardbxengine/mysql-test/suite/auth_sec/r/partial_revokes_dml.result

524 lines
25 KiB
Plaintext

# -----------------------------------------------------------------------
# Start : DML Tests for Partial Revokes
# -----------------------------------------------------------------------
# -----------------------------------------------------------------------
# Setup
# Create database and objects
CREATE DATABASE partial_revokes_db;
CREATE DATABASE partial_revokes_db_2;
# Create users
CREATE USER foo@localhost IDENTIFIED BY 'abcd';
CREATE USER bar@localhost IDENTIFIED BY 'efgh';
# -----------------------------------------------------------------------
# Start: Test cases for Base tables.
CREATE TABLE partial_revokes_db.t1(c1 int, c2 int);
INSERT INTO partial_revokes_db.t1 values (1,2), (3,4);
CREATE TABLE partial_revokes_db_2.t1(a1 int, a2 int);
INSERT INTO partial_revokes_db_2.t1 values (1,2), (5,6), (9,10), (11,12);
CREATE TABLE partial_revokes_db.t2 (a date, b date, c date not null, d date);
# -----------------------------------------------------------------------
# -----------------------------------------------------------------------
# Case: *.* + Partial Revoke on INSERT + INSERT
GRANT INSERT, SELECT ON *.* TO foo@localhost;
REVOKE INSERT ON partial_revokes_db.* FROM foo@localhost;
INSERT INTO partial_revokes_db.t1 VALUES (5,6);
ERROR 42000: INSERT command denied to user 'foo'@'localhost' for table 't1'
SELECT COUNT(*) FROM partial_revokes_db.t1;
COUNT(*)
2
REVOKE INSERT, SELECT ON *.* FROM foo@localhost;
# -----------------------------------------------------------------------
# Case: *.* + Partial Revoke on SELECT + INSERT ... SELECT
GRANT INSERT, SELECT ON *.* TO foo@localhost;
REVOKE SELECT ON partial_revokes_db.* FROM foo@localhost;
INSERT INTO partial_revokes_db_2.t1 SELECT * FROM partial_revokes_db.t1;
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 't1'
INSERT INTO partial_revokes_db_2.t1 VALUES (1,2), (3,4);
INSERT INTO partial_revokes_db.t1 VALUES (5,6), (7,8);
REVOKE INSERT, SELECT ON *.* FROM foo@localhost;
# -----------------------------------------------------------------------
# Case: *.* + Partial Revoke on UPDATE + UPDATE
GRANT UPDATE, SELECT ON *.* TO foo@localhost;
REVOKE UPDATE ON partial_revokes_db.* FROM foo@localhost;
UPDATE partial_revokes_db.t1 SET c1 = c1 + 1;
ERROR 42000: UPDATE command denied to user 'foo'@'localhost' for table 't1'
UPDATE partial_revokes_db.t1 SET c2 = c2 + 1 WHERE c1 = 2;
ERROR 42000: UPDATE command denied to user 'foo'@'localhost' for table 't1'
REVOKE UPDATE, SELECT ON *.* FROM foo@localhost;
# -----------------------------------------------------------------------
# Case: *.* + Partial Revoke on SELECT + UPDATE ... SELECT
GRANT UPDATE, SELECT ON *.* TO foo@localhost;
REVOKE SELECT ON partial_revokes_db.* FROM foo@localhost;
UPDATE partial_revokes_db.t1 SET c1 = 1;
UPDATE partial_revokes_db.t1 SET c1 = c1 + 1;
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for column 'c1' in table 't1'
UPDATE partial_revokes_db.t1 SET c2 = c2 + 1 WHERE c1 = 2;
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for column 'c1' in table 't1'
REVOKE UPDATE, SELECT ON *.* FROM foo@localhost;
# -----------------------------------------------------------------------
# Case: *.* + Partial Revoke on DELETE + DELETE
GRANT DELETE, SELECT ON *.* TO foo@localhost;
REVOKE DELETE ON partial_revokes_db.* FROM foo@localhost;
DELETE FROM partial_revokes_db.t1 WHERE c1 = 1;
ERROR 42000: DELETE command denied to user 'foo'@'localhost' for table 't1'
DELETE FROM partial_revokes_db.t1;
ERROR 42000: DELETE command denied to user 'foo'@'localhost' for table 't1'
REVOKE DELETE, SELECT ON *.* FROM foo@localhost;
# -----------------------------------------------------------------------
# Case: *.* + Partial Revoke on SELECT + DELETE ... SELECT
GRANT DELETE, SELECT ON *.* TO foo@localhost;
REVOKE SELECT ON partial_revokes_db.* FROM foo@localhost;
DELETE FROM partial_revokes_db.t1 WHERE c1 = 1;
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for column 'c1' in table 't1'
DELETE FROM partial_revokes_db.t1;
REVOKE DELETE, SELECT ON *.* FROM foo@localhost;
# -----------------------------------------------------------------------
# Case: *.* + Partial Revoke on DELETE + REPLACE
GRANT SELECT, INSERT, DELETE ON *.* TO foo@localhost;
REVOKE DELETE ON partial_revokes_db.* FROM foo@localhost;
REPLACE INTO partial_revokes_db.t1 VALUES (1,3);
ERROR 42000: DELETE command denied to user 'foo'@'localhost' for table 't1'
REPLACE INTO partial_revokes_db.t1 VALUES (5,6);
ERROR 42000: DELETE command denied to user 'foo'@'localhost' for table 't1'
REPLACE INTO partial_revokes_db_2.t1 VALUES (1,3);
REPLACE INTO partial_revokes_db_2.t1 SELECT * FROM partial_revokes_db.t1 ORDER BY c1;
REVOKE SELECT, INSERT, DELETE ON *.* FROM foo@localhost;
# -----------------------------------------------------------------------
# Case: *.* + Partial Revoke on INSERT + REPLACE
GRANT SELECT, INSERT, DELETE ON *.* TO foo@localhost;
REVOKE INSERT ON partial_revokes_db.* FROM foo@localhost;
REPLACE INTO partial_revokes_db.t1 VALUES (1,3);
ERROR 42000: INSERT command denied to user 'foo'@'localhost' for table 't1'
REPLACE INTO partial_revokes_db.t1 VALUES (5,6);
ERROR 42000: INSERT command denied to user 'foo'@'localhost' for table 't1'
REPLACE INTO partial_revokes_db_2.t1 VALUES (1,3);
REPLACE INTO partial_revokes_db_2.t1 SELECT * FROM partial_revokes_db.t1 ORDER BY c1;
REVOKE SELECT, INSERT, DELETE ON *.* FROM foo@localhost;
# -----------------------------------------------------------------------
# Case: *.* + Partial Revoke on INSERT + LOAD
GRANT INSERT, SELECT, FILE ON *.* TO foo@localhost;
REVOKE INSERT ON partial_revokes_db.* FROM foo@localhost;
LOAD DATA INFILE '../../std_data/loaddata1.dat' IGNORE INTO TABLE partial_revokes_db.t2 FIELDS TERMINATED BY ',';
ERROR 42000: INSERT command denied to user 'foo'@'localhost' for table 't2'
SELECT * FROM partial_revokes_db.t2;
a b c d
REVOKE INSERT, SELECT ON *.* FROM foo@localhost;
# -----------------------------------------------------------------------
# Case: *.* + Partial Revoke on INSERT + CTE
GRANT SELECT ON *.* TO foo@localhost;
REVOKE SELECT ON partial_revokes_db.* FROM foo@localhost;
WITH cte1 AS (SELECT c1, c2 FROM partial_revokes_db.t1),
cte2 AS (SELECT a1, a2 FROM partial_revokes_db_2.t1)
SELECT c2, a2 FROM cte1 JOIN cte2 WHERE cte1.c1 = cte2.a1;
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 't1'
REVOKE SELECT ON *.* FROM foo@localhost;
# -----------------------------------------------------------------------
# End: Test cases for Base tables.
DROP TABLE partial_revokes_db.t1;
DROP TABLE partial_revokes_db.t2;
DROP TABLE partial_revokes_db_2.t1;
# -----------------------------------------------------------------------
# -----------------------------------------------------------------------
# Start: Test cases for views.
CREATE TABLE partial_revokes_db.t1(c1 int, c2 int);
INSERT INTO partial_revokes_db.t1 values (1,2), (3,4), (5,6), (7,8);
CREATE TABLE partial_revokes_db_2.t2(a1 int, a2 int);
INSERT INTO partial_revokes_db_2.t2 values (1,2), (5,6), (9,10), (11,12);
CREATE SQL SECURITY DEFINER VIEW partial_revokes_db.v1t1d AS SELECT * FROM partial_revokes_db.t1;
CREATE SQL SECURITY INVOKER VIEW partial_revokes_db.v1t1i AS SELECT * FROM partial_revokes_db.t1;
CREATE SQL SECURITY DEFINER VIEW partial_revokes_db.v1t2d AS SELECT * FROM partial_revokes_db_2.t2;
CREATE SQL SECURITY INVOKER VIEW partial_revokes_db.v1t2i AS SELECT * FROM partial_revokes_db_2.t2;
CREATE SQL SECURITY DEFINER VIEW partial_revokes_db_2.v1t1d AS SELECT * FROM partial_revokes_db.t1;
CREATE SQL SECURITY INVOKER VIEW partial_revokes_db_2.v1t1i AS SELECT * FROM partial_revokes_db.t1;
CREATE SQL SECURITY DEFINER VIEW partial_revokes_db_2.v1t2d AS SELECT * FROM partial_revokes_db_2.t2;
CREATE SQL SECURITY INVOKER VIEW partial_revokes_db_2.v1t2i AS SELECT * FROM partial_revokes_db_2.t2;
# -----------------------------------------------------------------------
# -----------------------------------------------------------------------
# Case: *.* + Partial Revoke on SELECT + SELECT, SHOW VIEW
GRANT SELECT, SHOW VIEW ON *.* TO foo@localhost;
REVOKE SELECT ON partial_revokes_db.* FROM foo@localhost;
SELECT * FROM partial_revokes_db.v1t1d;
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 'v1t1d'
SELECT * FROM partial_revokes_db.v1t1i;
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 'v1t1i'
SELECT * FROM partial_revokes_db.v1t2d;
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 'v1t2d'
SELECT * FROM partial_revokes_db.v1t2i;
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 'v1t2i'
SELECT * FROM partial_revokes_db_2.v1t1d;
c1 c2
1 2
3 4
5 6
7 8
SELECT * FROM partial_revokes_db_2.v1t1i;
ERROR HY000: View 'partial_revokes_db_2.v1t1i' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
SELECT * FROM partial_revokes_db_2.v1t2d;
a1 a2
1 2
5 6
9 10
11 12
SELECT * FROM partial_revokes_db_2.v1t2i;
a1 a2
1 2
5 6
9 10
11 12
SHOW CREATE VIEW partial_revokes_db.v1t1d;
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 'v1t1d'
SHOW CREATE VIEW partial_revokes_db.v1t1i;
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 'v1t1i'
SHOW CREATE VIEW partial_revokes_db.v1t2d;
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 'v1t2d'
SHOW CREATE VIEW partial_revokes_db.v1t2i;
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 'v1t2i'
SHOW CREATE VIEW partial_revokes_db_2.v1t1d;
View Create View character_set_client collation_connection
v1t1d CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `partial_revokes_db_2`.`v1t1d` AS select `partial_revokes_db`.`t1`.`c1` AS `c1`,`partial_revokes_db`.`t1`.`c2` AS `c2` from `partial_revokes_db`.`t1` utf8mb4 utf8mb4_0900_ai_ci
SHOW CREATE VIEW partial_revokes_db_2.v1t1i;
View Create View character_set_client collation_connection
v1t1i CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY INVOKER VIEW `partial_revokes_db_2`.`v1t1i` AS select `partial_revokes_db`.`t1`.`c1` AS `c1`,`partial_revokes_db`.`t1`.`c2` AS `c2` from `partial_revokes_db`.`t1` utf8mb4 utf8mb4_0900_ai_ci
SHOW CREATE VIEW partial_revokes_db_2.v1t2d;
View Create View character_set_client collation_connection
v1t2d CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `partial_revokes_db_2`.`v1t2d` AS select `partial_revokes_db_2`.`t2`.`a1` AS `a1`,`partial_revokes_db_2`.`t2`.`a2` AS `a2` from `partial_revokes_db_2`.`t2` utf8mb4 utf8mb4_0900_ai_ci
SHOW CREATE VIEW partial_revokes_db_2.v1t2i;
View Create View character_set_client collation_connection
v1t2i CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY INVOKER VIEW `partial_revokes_db_2`.`v1t2i` AS select `partial_revokes_db_2`.`t2`.`a1` AS `a1`,`partial_revokes_db_2`.`t2`.`a2` AS `a2` from `partial_revokes_db_2`.`t2` utf8mb4 utf8mb4_0900_ai_ci
REVOKE SELECT ON *.* FROM foo@localhost;
# -----------------------------------------------------------------------
# Case: *.* + Partial Revoke on INSERT + INSERT
GRANT INSERT ON *.* TO foo@localhost;
REVOKE INSERT ON partial_revokes_db.* FROM foo@localhost;
INSERT INTO partial_revokes_db.v1t1d VALUES (1,2);
ERROR 42000: INSERT command denied to user 'foo'@'localhost' for table 'v1t1d'
INSERT INTO partial_revokes_db.v1t1i VALUES (1,2);
ERROR 42000: INSERT command denied to user 'foo'@'localhost' for table 'v1t1i'
INSERT INTO partial_revokes_db.v1t2i VALUES (1,2);
ERROR 42000: INSERT command denied to user 'foo'@'localhost' for table 'v1t2i'
INSERT INTO partial_revokes_db.v1t2d VALUES (1,2);
ERROR 42000: INSERT command denied to user 'foo'@'localhost' for table 'v1t2d'
INSERT INTO partial_revokes_db_2.v1t1d VALUES (1,2);
INSERT INTO partial_revokes_db_2.v1t1i VALUES (1,2);
ERROR HY000: View 'partial_revokes_db_2.v1t1i' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
INSERT INTO partial_revokes_db_2.v1t2d VALUES(1,2);
INSERT INTO partial_revokes_db_2.v1t2i VALUES(1,2);
REVOKE INSERT ON *.* FROM foo@localhost;
DELETE FROM partial_revokes_db.t1;
DELETE FROM partial_revokes_db_2.t2;
# -----------------------------------------------------------------------
# Case: *.* + Partial Revoke on INSERT + INSERT ... SELECT
INSERT INTO partial_revokes_db.t1 values (1,2), (3,4), (5,6), (7,8);
GRANT INSERT, SELECT ON *.* TO foo@localhost;
REVOKE SELECT ON partial_revokes_db.* FROM foo@localhost;
INSERT INTO partial_revokes_db_2.v1t2d SELECT * FROM partial_revokes_db.v1t1d;
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 'v1t1d'
INSERT INTO partial_revokes_db_2.v1t2d SELECT * FROM partial_revokes_db.v1t1i;
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 'v1t1i'
INSERT INTO partial_revokes_db_2.v1t2d SELECT * FROM partial_revokes_db.v1t2d;
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 'v1t2d'
INSERT INTO partial_revokes_db_2.v1t2d SELECT * FROM partial_revokes_db.v1t2i;
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 'v1t2i'
INSERT INTO partial_revokes_db_2.v1t2i SELECT * FROM partial_revokes_db.v1t1i;
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 'v1t1i'
INSERT INTO partial_revokes_db_2.v1t2i SELECT * FROM partial_revokes_db_2.v1t1d;
INSERT INTO partial_revokes_db_2.v1t2i SELECT * FROM partial_revokes_db_2.v1t2d;
INSERT INTO partial_revokes_db_2.v1t2i SELECT * FROM partial_revokes_db_2.v1t2i;
DELETE FROM partial_revokes_db.t1;
DELETE FROM partial_revokes_db_2.t2;
REVOKE INSERT, SELECT ON *.* FROM foo@localhost;
# -----------------------------------------------------------------------
# Case: *.* + Partial Revoke on DELETE + DELETE
INSERT INTO partial_revokes_db.t1 values (1,2), (3,4), (5,6), (7,8);
INSERT INTO partial_revokes_db_2.t2 values (1,2), (3,4), (5,6), (7,8);
GRANT DELETE ON *.* TO foo@localhost;
REVOKE DELETE ON partial_revokes_db.* FROM foo@localhost;
DELETE FROM partial_revokes_db.v1t1d;
ERROR 42000: DELETE command denied to user 'foo'@'localhost' for table 'v1t1d'
DELETE FROM partial_revokes_db.v1t1i;
ERROR 42000: DELETE command denied to user 'foo'@'localhost' for table 'v1t1i'
DELETE FROM partial_revokes_db.v1t2d;
ERROR 42000: DELETE command denied to user 'foo'@'localhost' for table 'v1t2d'
DELETE FROM partial_revokes_db.v1t2i;
ERROR 42000: DELETE command denied to user 'foo'@'localhost' for table 'v1t2i'
DELETE FROM partial_revokes_db_2.v1t1d;
DELETE FROM partial_revokes_db_2.v1t1i;
ERROR HY000: View 'partial_revokes_db_2.v1t1i' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
DELETE FROM partial_revokes_db_2.v1t2d;
DELETE FROM partial_revokes_db_2.v1t2i;
DELETE FROM partial_revokes_db.t1;
DELETE FROM partial_revokes_db_2.t2;
REVOKE DELETE ON *.* FROM foo@localhost;
# -----------------------------------------------------------------------
# Case: *.* + Partial Revoke on SELECT + DELETE ... SELECT
INSERT INTO partial_revokes_db.t1 values (1,2), (3,4), (5,6), (7,8);
INSERT INTO partial_revokes_db_2.t2 values (1,2), (3,4), (5,6), (7,8);
GRANT DELETE, SELECT ON *.* TO foo@localhost;
REVOKE SELECT ON partial_revokes_db.* FROM foo@localhost;
DELETE FROM partial_revokes_db.v1t1d WHERE c1 = 1;
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for column 'c1' in table 'v1t1d'
DELETE FROM partial_revokes_db.v1t1i WHERE c1 = 1;
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for column 'c1' in table 'v1t1i'
DELETE FROM partial_revokes_db.v1t2d WHERE a1 = 1;
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for column 'a1' in table 'v1t2d'
DELETE FROM partial_revokes_db.v1t2i WHERE a1 = 1;
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for column 'a1' in table 'v1t2i'
DELETE FROM partial_revokes_db_2.v1t1d;
DELETE FROM partial_revokes_db_2.v1t1i WHERE c1 = 1;
ERROR HY000: View 'partial_revokes_db_2.v1t1i' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
DELETE FROM partial_revokes_db_2.v1t2d WHERE a1 = 1;
DELETE FROM partial_revokes_db_2.v1t2i WHERE a1 = 1;
DELETE FROM partial_revokes_db.t1;
DELETE FROM partial_revokes_db_2.t2;
REVOKE ALL PRIVILEGES, GRANT OPTION FROM foo@localhost;
# -----------------------------------------------------------------------
# End: Test cases for views.
DROP TABLE IF EXISTS partial_revokes_db.t1;
DROP TABLE IF EXISTS partial_revokes_db_2.t1;
Warnings:
Note 1051 Unknown table 'partial_revokes_db_2.t1'
DROP VIEW IF EXISTS partial_revokes_db.v1t1d;
DROP VIEW IF EXISTS partial_revokes_db.v1t1i;
DROP VIEW IF EXISTS partial_revokes_db.v1t2d;
DROP VIEW IF EXISTS partial_revokes_db.v1t2i;
DROP VIEW IF EXISTS partial_revokes_db_2.v1t1d;
DROP VIEW IF EXISTS partial_revokes_db_2.v1t1i;
DROP VIEW IF EXISTS partial_revokes_db_2.v1t2d;
DROP VIEW IF EXISTS partial_revokes_db_2.v1t2i;
# -----------------------------------------------------------------------
# -----------------------------------------------------------------------
# Case: *.* + Partial Revoke + SHOW DATABASE
CREATE USER baz@localhost IDENTIFIED BY 'abcd';
CREATE ROLE r3;
GRANT INSERT,SELECT ON *.* TO baz@localhost;
GRANT INSERT,SELECT ON *.* TO r3;
REVOKE INSERT,SELECT ON partial_revokes_db.* FROM baz@localhost;
REVOKE INSERT,SELECT ON partial_revokes_db_2.* FROM r3;
GRANT r3 TO baz@localhost;
SHOW GRANTS;
Grants for baz@localhost
GRANT SELECT, INSERT ON *.* TO `baz`@`localhost`
REVOKE SELECT, INSERT ON `partial_revokes_db`.* FROM `baz`@`localhost`
GRANT `r3`@`%` TO `baz`@`localhost`
SHOW DATABASES;
Database
__recycle_bin__
information_schema
mtr
mysql
partial_revokes_db_2
performance_schema
sys
test
SET ROLE r3;
SHOW DATABASES;
Database
__recycle_bin__
information_schema
mtr
mysql
partial_revokes_db
partial_revokes_db_2
performance_schema
sys
test
GRANT INSERT ON `partial_revokes_db`.* TO baz@localhost;
SHOW GRANTS;
Grants for baz@localhost
GRANT SELECT, INSERT ON *.* TO `baz`@`localhost`
REVOKE SELECT ON `partial_revokes_db`.* FROM `baz`@`localhost`
GRANT `r3`@`%` TO `baz`@`localhost`
SHOW DATABASES;
Database
__recycle_bin__
information_schema
mtr
mysql
partial_revokes_db
partial_revokes_db_2
performance_schema
sys
test
SET ROLE r3;
SHOW DATABASES;
Database
__recycle_bin__
information_schema
mtr
mysql
partial_revokes_db
partial_revokes_db_2
performance_schema
sys
test
GRANT SELECT ON `partial_revokes_db`.* TO baz@localhost;
SHOW GRANTS;
Grants for baz@localhost
GRANT SELECT, INSERT ON *.* TO `baz`@`localhost`
GRANT `r3`@`%` TO `baz`@`localhost`
SHOW DATABASES;
Database
__recycle_bin__
information_schema
mtr
mysql
partial_revokes_db
partial_revokes_db_2
performance_schema
sys
test
SET ROLE r3;
SHOW DATABASES;
Database
__recycle_bin__
information_schema
mtr
mysql
partial_revokes_db
partial_revokes_db_2
performance_schema
sys
test
# -----------------------------------------------------------------------
DROP USER baz@localhost;
DROP ROLE r3;
# End: Test cases for Show database.
# -----------------------------------------------------------------------
# -----------------------------------------------------------------------
# Start: Test cases for stored routines.
# -----------------------------------------------------------------------
CREATE TABLE partial_revokes_db.tp1(c1 int, c2 int);
INSERT INTO partial_revokes_db.tp1 VALUES (1,2), (3,4);
CREATE TABLE partial_revokes_db_2.tp2(c1 int, c2 int);
INSERT INTO partial_revokes_db_2.tp2 VALUES (5,6), (7,8);
CREATE PROCEDURE partial_revokes_db.p1tp1d_count() SELECT COUNT(*) FROM partial_revokes_db.tp1;
CREATE PROCEDURE partial_revokes_db.p1tp1i_count() SELECT COUNT(*) FROM partial_revokes_db.tp1;
ALTER PROCEDURE partial_revokes_db.p1tp1i_count SQL SECURITY INVOKER;
CREATE PROCEDURE partial_revokes_db.p1tp2d_count() SELECT COUNT(*) FROM partial_revokes_db_2.tp2;
CREATE PROCEDURE partial_revokes_db.p1tp2i_count() SELECT COUNT(*) FROM partial_revokes_db_2.tp2;
ALTER PROCEDURE partial_revokes_db.p1tp2i_count SQL SECURITY INVOKER;
CREATE PROCEDURE partial_revokes_db_2.p2tp1d_count() SELECT COUNT(*) FROM partial_revokes_db.tp1;
CREATE PROCEDURE partial_revokes_db_2.p2tp1i_count() SELECT COUNT(*) FROM partial_revokes_db.tp1;
ALTER PROCEDURE partial_revokes_db_2.p2tp1i_count SQL SECURITY INVOKER;
CREATE PROCEDURE partial_revokes_db_2.p2tp2d_count() SELECT COUNT(*) FROM partial_revokes_db_2.tp2;
CREATE PROCEDURE partial_revokes_db_2.p2tp2i_count() SELECT COUNT(*) FROM partial_revokes_db_2.tp2;
ALTER PROCEDURE partial_revokes_db_2.p2tp2i_count SQL SECURITY INVOKER;
# -----------------------------------------------------------------------
# -----------------------------------------------------------------------
# Case: *.* + Partial Revoke on EXECUTE
GRANT EXECUTE, SELECT ON *.* TO foo@localhost;
REVOKE EXECUTE, SELECT ON partial_revokes_db.* FROM foo@localhost;
SHOW GRANTS FOR foo@localhost;
Grants for foo@localhost
GRANT SELECT, EXECUTE ON *.* TO `foo`@`localhost`
REVOKE SELECT, EXECUTE ON `partial_revokes_db`.* FROM `foo`@`localhost`
CALL partial_revokes_db.p1tp1d_count();
ERROR 42000: execute command denied to user 'foo'@'localhost' for routine 'partial_revokes_db.p1tp1d_count'
CALL partial_revokes_db.p1tp1i_count();
ERROR 42000: execute command denied to user 'foo'@'localhost' for routine 'partial_revokes_db.p1tp1i_count'
CALL partial_revokes_db.p1tp2d_count();
ERROR 42000: execute command denied to user 'foo'@'localhost' for routine 'partial_revokes_db.p1tp2d_count'
CALL partial_revokes_db.p1tp2i_count();
ERROR 42000: execute command denied to user 'foo'@'localhost' for routine 'partial_revokes_db.p1tp2i_count'
CALL partial_revokes_db_2.p2tp1d_count();
COUNT(*)
2
CALL partial_revokes_db_2.p2tp1i_count();
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 'tp1'
CALL partial_revokes_db_2.p2tp2d_count();
COUNT(*)
2
CALL partial_revokes_db_2.p2tp2i_count();
COUNT(*)
2
REVOKE EXECUTE, SELECT ON *.* FROM foo@localhost;
# -----------------------------------------------------------------------
DROP PROCEDURE partial_revokes_db.p1tp1d_count;
DROP PROCEDURE partial_revokes_db.p1tp1i_count;
DROP PROCEDURE partial_revokes_db.p1tp2d_count;
DROP PROCEDURE partial_revokes_db.p1tp2i_count;
DROP PROCEDURE partial_revokes_db_2.p2tp1d_count;
DROP PROCEDURE partial_revokes_db_2.p2tp1i_count;
DROP PROCEDURE partial_revokes_db_2.p2tp2d_count;
DROP PROCEDURE partial_revokes_db_2.p2tp2i_count;
DROP TABLE partial_revokes_db.tp1;
DROP TABLE partial_revokes_db_2.tp2;
# End: Test cases for stored routines.
# -----------------------------------------------------------------------
# -----------------------------------------------------------------------
# Start: Test case for table and column grants
# -----------------------------------------------------------------------
REVOKE ALL PRIVILEGES, GRANT OPTION FROM foo@localhost;
SHOW GRANTS FOR foo@localhost;
Grants for foo@localhost
GRANT USAGE ON *.* TO `foo`@`localhost`
CREATE TABLE partial_revokes_db.t1(c1 int);
INSERT INTO partial_revokes_db.t1 VALUES (1), (2), (3);
CREATE SQL SECURITY INVOKER VIEW partial_revokes_db_2.v1t1i AS SELECT * FROM partial_revokes_db.t1;
CREATE PROCEDURE partial_revokes_db_2.p1t1i_c1() SELECT COUNT(*) FROM partial_revokes_db.t1;
ALTER PROCEDURE partial_revokes_db_2.p1t1i_c1 SQL SECURITY INVOKER;
CREATE TABLE partial_revokes_db.t2(c1 int, c2 int);
INSERT INTO partial_revokes_db.t2 VALUES (1,2), (3,4), (5,6);
CREATE SQL SECURITY INVOKER VIEW partial_revokes_db_2.v2t2i AS SELECT c1 FROM partial_revokes_db.t2;
CREATE PROCEDURE partial_revokes_db_2.p2t2i_c1() SELECT c1 FROM partial_revokes_db.t2;
ALTER PROCEDURE partial_revokes_db_2.p2t2i_c1 SQL SECURITY INVOKER;
GRANT SELECT, EXECUTE ON *.* TO foo@localhost;
REVOKE SELECT ON partial_revokes_db.* FROM foo@localhost;
GRANT SELECT ON partial_revokes_db.t1 TO foo@localhost;
GRANT SELECT(c1) ON partial_revokes_db.t2 TO foo@localhost;
SHOW GRANTS FOR foo@localhost;
Grants for foo@localhost
GRANT SELECT, EXECUTE ON *.* TO `foo`@`localhost`
REVOKE SELECT ON `partial_revokes_db`.* FROM `foo`@`localhost`
GRANT SELECT ON `partial_revokes_db`.`t1` TO `foo`@`localhost`
GRANT SELECT (`c1`) ON `partial_revokes_db`.`t2` TO `foo`@`localhost`
SELECT * FROM partial_revokes_db.t1;
c1
1
2
3
SELECT * FROM partial_revokes_db_2.v1t1i;
c1
1
2
3
CALL partial_revokes_db_2.p1t1i_c1();
COUNT(*)
3
SELECT c1 FROM partial_revokes_db.t2;
c1
1
3
5
SELECT * FROM partial_revokes_db_2.v2t2i;
c1
1
3
5
CALL partial_revokes_db_2.p2t2i_c1();
c1
1
3
5
# -----------------------------------------------------------------------
REVOKE ALL PRIVILEGES, GRANT OPTION FROM foo@localhost;
DROP TABLE partial_revokes_db.t1;
DROP VIEW partial_revokes_db_2.v1t1i;
DROP PROCEDURE partial_revokes_db_2.p1t1i_c1;
DROP TABLE partial_revokes_db.t2;
DROP VIEW partial_revokes_db_2.v2t2i;
DROP PROCEDURE partial_revokes_db_2.p2t2i_c1;
# End: Test cases for table and column grants
# -----------------------------------------------------------------------
# -----------------------------------------------------------------------
# Cleanup
# Drop database
DROP DATABASE partial_revokes_db;
DROP DATABASE partial_revokes_db_2;
# Drop users
DROP USER foo@localhost, bar@localhost;
# -----------------------------------------------------------------------
# -----------------------------------------------------------------------
# End : DML Tests for Partial Revokes
# -----------------------------------------------------------------------