1+ #
2+ # MDEV-5215 Granted to PUBLIC
3+ #
14SHOW GRANTS FOR PUBLIC;
25Grants for PUBLIC
36# it is not PUBLIC but an user
@@ -7,39 +10,6 @@ create user PUBLIC@localhost;
710GRANT SELECT on test.* to PUBLIC@localhost;
811drop user PUBLIC@localhost;
912drop user PUBLIC;
10- # preinstalled PUBLIC
11- GRANT SELECT on test.* to PUBLIC;
12- GRANT SELECT on mysql.db to PUBLIC;
13- select * from mysql.global_priv where user="PUBLIC" ;
14- Host User Priv
15- PUBLIC {"access":0,"version_id":VERSION,"is_role":true}
16- SHOW GRANTS FOR PUBLIC;
17- Grants for PUBLIC
18- GRANT SELECT ON `test`.* TO `PUBLIC`
19- GRANT SELECT ON `mysql`.`db` TO `PUBLIC`
20- GRANT UPDATE on test.* to PUBLIC;
21- GRANT UPDATE on mysql.db to PUBLIC;
22- SHOW GRANTS FOR PUBLIC;
23- Grants for PUBLIC
24- GRANT SELECT, UPDATE ON `test`.* TO `PUBLIC`
25- GRANT SELECT, UPDATE ON `mysql`.`db` TO `PUBLIC`
26- REVOKE SELECT on test.* from PUBLIC;
27- REVOKE SELECT on mysql.db from PUBLIC;
28- SHOW GRANTS FOR PUBLIC;
29- Grants for PUBLIC
30- GRANT UPDATE ON `test`.* TO `PUBLIC`
31- GRANT UPDATE ON `mysql`.`db` TO `PUBLIC`
32- REVOKE UPDATE on test.* from PUBLIC;
33- REVOKE UPDATE on mysql.db from PUBLIC;
34- REVOKE UPDATE on test.* from PUBLIC;
35- ERROR 42000: There is no such grant defined for user 'PUBLIC' on host ''
36- REVOKE UPDATE on mysql.db from PUBLIC;
37- ERROR 42000: There is no such grant defined for user 'PUBLIC' on host '' on table 'db'
38- SHOW GRANTS FOR PUBLIC;
39- Grants for PUBLIC
40- # automaticly added PUBLIC
41- delete from mysql.global_priv where user="PUBLIC";
42- flush privileges;
4313select * from mysql.global_priv where user="PUBLIC" ;
4414Host User Priv
4515GRANT SELECT on test.* to PUBLIC;
@@ -52,12 +22,12 @@ Grants for PUBLIC
5222GRANT SELECT ON `test`.* TO `PUBLIC`
5323GRANT SELECT ON `mysql`.`db` TO `PUBLIC`
5424GRANT UPDATE on test.* to PUBLIC;
55- GRANT UPDATE on mysql.db to PUBLIC ;
56- SHOW GRANTS FOR PUBLIC ;
25+ grant update on mysql.db to public ;
26+ show grants for public ;
5727Grants for PUBLIC
5828GRANT SELECT, UPDATE ON `test`.* TO `PUBLIC`
5929GRANT SELECT, UPDATE ON `mysql`.`db` TO `PUBLIC`
60- REVOKE SELECT on test.* from PUBLIC ;
30+ revoke select on test.* from public ;
6131REVOKE SELECT on mysql.db from PUBLIC;
6232SHOW GRANTS FOR PUBLIC;
6333Grants for PUBLIC
@@ -72,15 +42,15 @@ ERROR OP000: Invalid role specification `XXXXXX`
7242# following should fail with the same error as above
7343GRANT PUBLIC TO CURRENT_USER;
7444ERROR OP000: Invalid role specification `PUBLIC`
75- REVOKE XXXXXX FROM CURRENT_USER ;
76- ERROR OP000: Invalid role specification `XXXXXX `
45+ revoke xxxxxx from current_user ;
46+ ERROR OP000: Invalid role specification `xxxxxx `
7747# following should fail with the same error as above
78- REVOKE PUBLIC FROM CURRENT_USER ;
79- ERROR OP000: Invalid role specification `PUBLIC `
48+ revoke public from current_user ;
49+ ERROR OP000: Invalid role specification `public `
8050drop role XXXXXX;
8151ERROR HY000: Operation DROP ROLE failed for 'XXXXXX'
8252# following should fail with the same error as above
83- drop role PUBLIC ;
53+ drop role public ;
8454ERROR HY000: Operation DROP ROLE failed for PUBLIC
8555SET ROLE XXXXXX;
8656ERROR OP000: Invalid role specification `XXXXXX`
@@ -92,6 +62,8 @@ ERROR OP000: Invalid role specification `XXXXXX`
9262# following should fail with the same error as above
9363SET DEFAULT ROLE PUBLIC;
9464ERROR OP000: Invalid role specification `PUBLIC`
65+ set default role public;
66+ ERROR OP000: Invalid role specification `public`
9567#
9668# check prohibition of change security context to PUBLIC
9769#
@@ -100,39 +72,34 @@ GRANT SELECT on test.* to PUBLIC;
10072# try with a view
10173create table t1( a int);
10274create definer = PUBLIC view v1 as select * from t1;
103- Warnings:
104- Note 1449 The user specified as a definer ('PUBLIC'@'') does not exist
105- show create view v1;
106- View Create View character_set_client collation_connection
107- v1 CREATE ALGORITHM=UNDEFINED DEFINER=`PUBLIC` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a` from `t1` latin1 latin1_swedish_ci
108- Warnings:
109- Note 1449 The user specified as a definer ('PUBLIC'@'') does not exist
110- select * from v1;
111- ERROR HY000: The user specified as a definer ('PUBLIC'@'') does not exist
112- drop view v1;
75+ ERROR OP000: Invalid role specification `PUBLIC`
11376drop table t1;
114- # try with a view
77+ # try with a stored procedure
11578create definer='PUBLIC' PROCEDURE p1() SELECT 1;
116- Warnings:
117- Note 1449 The user specified as a definer ('PUBLIC'@'') does not exist
118- show create procedure p1;
119- Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
120- p1 STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`PUBLIC` PROCEDURE `p1`()
121- SELECT 1 latin1 latin1_swedish_ci latin1_swedish_ci
122- call p1();
123- ERROR HY000: The user specified as a definer ('PUBLIC'@'') does not exist
124- drop procedure p1;
79+ ERROR OP000: Invalid role specification `PUBLIC`
12580# this test cleanup
126- REVOKE SELECT on test.* from PUBLIC ;
81+ revoke select on test.* from public ;
12782#
128- # check autocreation of PUBLIC on GRAND role TO PUBLIC
83+ # check autocreation of PUBLIC on GRANT role TO PUBLIC
12984#
13085# make sure that the privilege will be added automatically
13186delete from mysql.global_priv where user="PUBLIC";
13287flush privileges;
13388create role roletest;
134- GRANT roletest TO PUBLIC ;
89+ grant roletest to public ;
13590drop role roletest;
91+ delete from mysql.global_priv where user="PUBLIC";
92+ flush privileges;
93+ grant select on mysql.global_priv to public;
94+ revoke select on mysql.global_priv from public;
95+ delete from mysql.global_priv where user="PUBLIC";
96+ flush privileges;
97+ grant select (user) on mysql.global_priv to public;
98+ revoke select (user) on mysql.global_priv from public;
99+ delete from mysql.global_priv where user="PUBLIC";
100+ flush privileges;
101+ grant execute on procedure mtr.add_suppression to public;
102+ revoke execute on procedure mtr.add_suppression from public;
136103# clean up
137104delete from mysql.global_priv where user="PUBLIC";
138105flush privileges;
0 commit comments