File: revoke_if_exists.test

package info (click to toggle)
mysql-8.0 8.0.43-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,924 kB
  • sloc: cpp: 4,684,605; ansic: 412,450; pascal: 108,398; java: 83,641; perl: 30,221; cs: 27,067; sql: 26,594; sh: 24,181; python: 21,816; yacc: 17,169; php: 11,522; xml: 7,388; javascript: 7,076; makefile: 2,194; lex: 1,075; awk: 670; asm: 520; objc: 183; ruby: 97; lisp: 86
file content (296 lines) | stat: -rw-r--r-- 11,191 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296

--echo #
--echo # WL#14690: Support IF EXISTS and IGNORE UNKNOWN USER optional clauses
--echo #            in REVOKE statement
--echo #

CREATE DATABASE wl14690;
CREATE USER u1,u2,u3,u4;
CREATE ROLE r1,r2;
CREATE TABLE wl14690.t(i int, j int);
CREATE FUNCTION wl14690.fun() RETURNS INT DETERMINISTIC CONTAINS SQL RETURN @var1;

SET @@global.partial_revokes = OFF;

--echo # FR1.1.1: REVOKE ... IGNORE UNKNOWN USER where target user/role does not exists
RESET MASTER;
--error ER_REVOKE_GRANTS
REVOKE ALL ON *.* FROM unknown_user;
REVOKE ALL ON *.* FROM unknown_user IGNORE UNKNOWN USER;
SELECT COUNT(*) FROM mysql.user where user = 'unknown_user';
--error ER_NONEXISTING_GRANT
REVOKE SELECT ON *.* FROM unknown_user;
REVOKE SELECT ON *.* FROM unknown_user IGNORE UNKNOWN USER;
SELECT COUNT(*) FROM mysql.user where user = 'unknown_user';
--error ER_REVOKE_GRANTS
REVOKE ALL PRIVILEGES, GRANT OPTION FROM unknown_user;
REVOKE ALL PRIVILEGES, GRANT OPTION FROM unknown_user IGNORE UNKNOWN USER;
SELECT COUNT(*) FROM mysql.user where user = 'unknown_user';
--error ER_NONEXISTING_GRANT
REVOKE PROXY ON u1 FROM unknown_user;
REVOKE PROXY ON u1 FROM unknown_user IGNORE UNKNOWN USER;
--error ER_UNKNOWN_AUTHID
REVOKE r1 FROM unknown_user;
REVOKE r1 FROM unknown_user IGNORE UNKNOWN USER;
SELECT COUNT(*) FROM mysql.user where user = 'unknown_user';
--source include/show_binlog_events.inc

--echo # FR1.1.2: REVOKE ... IGNORE UNKNOWN USER where privilege does not exist
RESET MASTER;
--error ER_NONEXISTING_GRANT
REVOKE ALL ON wl14690.* FROM u1;
--error ER_NONEXISTING_GRANT
REVOKE ALL ON wl14690.* FROM u1 IGNORE UNKNOWN USER;
--source include/show_binlog_events.inc

GRANT SELECT, INSERT (i) ON wl14690.t TO u1, u2;
GRANT SYSTEM_VARIABLES_ADMIN,TABLE_ENCRYPTION_ADMIN ON *.* TO u2;
GRANT CREATE ROUTINE ON wl14690.* TO u1;
GRANT CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO u2;
GRANT EXECUTE ON FUNCTION wl14690.fun TO u1,u3;

--echo # FR1.2.1: REVOKE ... IGNORE UNKNOWN USER where target user/role exists
--echo #          and privilege being revoked is granted
SHOW GRANTS FOR u1;
SHOW GRANTS FOR u2;
RESET MASTER;
REVOKE INSERT (i) ON wl14690.t FROM u1, u2 IGNORE UNKNOWN USER;
--source include/show_binlog_events.inc
--echo # check that INSERT (i) is revoked.
SHOW GRANTS FOR u1;
SHOW GRANTS FOR u2;

--echo # FR1.2.2: REVOKE ... IGNORE UNKNOWN USER with missing target user/role
GRANT INSERT (i) ON wl14690.t TO u1, u2;
GRANT r1 TO u2;
SHOW GRANTS FOR u1;
SHOW GRANTS FOR u2;
RESET MASTER;
--error ER_NONEXISTING_TABLE_GRANT
REVOKE SELECT, INSERT (i) ON wl14690.t FROM u1, u2, unknown_user;
--error ER_NONEXISTING_GRANT
REVOKE TABLE_ENCRYPTION_ADMIN ON *.* FROM unknown_user, u2;
--error ER_UNKNOWN_AUTHID
REVOKE r1 FROM unknown_user, u2;
--echo # check that r1 grant exists for u2
SHOW GRANTS FOR u2;
REVOKE r1 FROM unknown_user, u2 IGNORE UNKNOWN USER;
REVOKE SELECT, INSERT (i) ON wl14690.t FROM u1, u2, unknown_user IGNORE UNKNOWN USER;
REVOKE TABLE_ENCRYPTION_ADMIN ON *.* FROM unknown_user, u2 IGNORE UNKNOWN USER;
--source include/show_binlog_events.inc
--echo # check that SELECT, INSERT (i) are revoked.
SHOW GRANTS FOR u1;
--echo # check that r1 grant is revoked for u2
SHOW GRANTS FOR u2;

--echo # FR1.2.3: REVOKE ... IGNORE UNKNOWN USER with missing target user/role
--echo #          and privilege being revoked is not granted
GRANT INSERT (i) ON wl14690.t TO u1, u2;
RESET MASTER;
--error ER_NONEXISTING_TABLE_GRANT
REVOKE INSERT (i) ON wl14690.t FROM u1, u2, u3, unknown_user IGNORE UNKNOWN USER;
--echo # check that INSERT (i) is not revoked.
SHOW GRANTS FOR u1;
SHOW GRANTS FOR u2;
--error ER_NONEXISTING_GRANT
REVOKE EVENT, TRIGGER ON wl14690.* FROM u2, u3, unknown_user IGNORE UNKNOWN USER;
--source include/show_binlog_events.inc
--echo # check that existing privileges are not revoked.
SHOW GRANTS FOR u1;
SHOW GRANTS FOR u2;

--echo # FR1.3.1: REVOKE IF EXISTS where target user/role exists and
--echo #          privilege being revoked is not granted
RESET MASTER;
--error ER_NONEXISTING_GRANT
REVOKE PROXY ON u3 FROM u1;
--error ER_NONEXISTING_GRANT
REVOKE IF EXISTS PROXY ON u3 FROM unknown_user, u1;
--echo # report warning
REVOKE IF EXISTS PROXY ON u3 FROM u1;
REVOKE IF EXISTS PROXY ON u3 FROM r1;
REVOKE ALL ON *.* FROM u1;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE ON *.* to u1;
--error ER_NONEXISTING_GRANT
REVOKE SELECT ON wl14690.* FROM u1;
--echo # report warning
REVOKE IF EXISTS SELECT ON wl14690.* FROM u1;
REVOKE IF EXISTS SELECT ON wl14690.* FROM r1;
REVOKE IF EXISTS INSERT (i) ON wl14690.t FROM u4;
REVOKE IF EXISTS INSERT (j) ON wl14690.t FROM u4;
REVOKE IF EXISTS ENCRYPTION_KEY_ADMIN, APPLICATION_PASSWORD_ADMIN ON *.* FROM u4;
--error ER_UNKNOWN_AUTHID
REVOKE role1 FROM u1;
REVOKE IF EXISTS role1 FROM u1;
GRANT r1 TO u1;
--error ER_UNKNOWN_AUTHID
REVOKE r1, role1 FROM u1;
--echo # check that r1 grant is not revoked to u1
SHOW GRANTS FOR u1;
REVOKE IF EXISTS role1, r1 FROM u1;
--source include/show_binlog_events.inc
--echo # check that r1 grant is revoked from u1
SHOW GRANTS FOR u1;
SHOW GRANTS FOR u2;

--echo # FR1.3.2: REVOKE IF EXISTS with missing target user/role and
--echo #          privilege being revoked is granted
RESET MASTER;
--error ER_NONEXISTING_GRANT
REVOKE SELECT ON *.* FROM unknown_user;
--error ER_NONEXISTING_GRANT
REVOKE IF EXISTS SELECT ON *.* FROM unknown_user;
--source include/show_binlog_events.inc

--echo # FR1.3.3: REVOKE IF EXISTS where target user/role exists and
--echo #          privilege being revoked is granted
RESET MASTER;
REVOKE IF EXISTS SELECT, INSERT, UPDATE ON *.* FROM u1;
--source include/show_binlog_events.inc

--echo # FR1.4.1: REVOKE IF EXISTS where multiple target users/roles exists and
--echo #          privilege being revoked is granted
REVOKE ALL ON *.* FROM u1;
REVOKE ALL ON *.* FROM u2;
REVOKE ALL ON *.* FROM u3;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE on wl14690.* to u1;
GRANT SELECT ON wl14690.* TO u2;
GRANT UPDATE, SELECT ON wl14690.* TO u3;
RESET MASTER;
REVOKE IF EXISTS SELECT ON wl14690.* FROM u1, u2, u3;
--error ER_UNKNOWN_AUTHID
REVOKE role1 FROM u1, u2;
REVOKE IF EXISTS role1 FROM u1, u2;
--source include/show_binlog_events.inc
--echo # SELECT should be revoked for all 3 users
SHOW GRANTS FOR u1;
SHOW GRANTS FOR u2;
SHOW GRANTS FOR u3;

--echo # FR1.4.2: REVOKE IF EXISTS where multiple target users/roles exists and
--echo #          privilege being revoked is not granted
REVOKE ALL ON *.* FROM u1;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE on *.* to u1;
GRANT SELECT ON *.* TO u2;
GRANT SELECT ON wl14690.* TO u3;
SHOW GRANTS FOR u3;
RESET MASTER;
--error ER_NONEXISTING_GRANT
REVOKE DELETE, SELECT ON wl14690.* FROM u1, u2, u3;
--error ER_NONEXISTING_GRANT
REVOKE IF EXISTS DELETE, SELECT ON wl14690.* FROM unknown_user, u1, u2;
REVOKE IF EXISTS DELETE, SELECT ON wl14690.* FROM u1, u2, u3;
REVOKE IF EXISTS DELETE, SELECT ON wl14690.* FROM r1;
--echo # for global level privleges IF EXISTS is implicit, so no warning
REVOKE IF EXISTS SYSTEM_VARIABLES_ADMIN,TABLE_ENCRYPTION_ADMIN,XA_RECOVER_ADMIN
ON *.* FROM u1,u2,u3,u4,r1;
--source include/show_binlog_events.inc
--echo # SELECT should be revoked for u3
SHOW GRANTS FOR u3;

--echo # FR1.4.3: REVOKE IF EXISTS where multiple target users/roles missing and
--echo #          privilege being revoked is granted
REVOKE ALL ON *.* FROM u1;
REVOKE ALL ON *.* FROM u2;
REVOKE ALL ON *.* FROM u3;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE on *.* to u1;
GRANT SYSTEM_VARIABLES_ADMIN,TABLE_ENCRYPTION_ADMIN,XA_RECOVER_ADMIN ON *.* TO u1;
GRANT UPDATE, SELECT ON *.* TO u2;
GRANT SELECT ON wl14690.* TO u3;
GRANT SYSTEM_VARIABLES_ADMIN,TABLE_ENCRYPTION_ADMIN,XA_RECOVER_ADMIN ON *.* TO u3;
SHOW GRANTS FOR u1;
SHOW GRANTS FOR u2;
SHOW GRANTS FOR u3;
RESET MASTER;
--error ER_NONEXISTING_GRANT
REVOKE IF EXISTS UPDATE, SELECT ON *.* FROM u1, u2, unknown_user;
--error ER_NONEXISTING_GRANT
REVOKE IF EXISTS TABLE_ENCRYPTION_ADMIN,XA_RECOVER_ADMIN ON *.* FROM unknown_user, u3, u1;
--source include/show_binlog_events.inc
--echo # grants should be same
SHOW GRANTS FOR u1;
SHOW GRANTS FOR u2;
SHOW GRANTS FOR u3;

--echo # FR1.5: REVOKE IF EXISTS ... IGNORE UNKNOWN USER with single target user
--echo #        and privilege which is not granted
RESET MASTER;
--echo # missing privileges and target user report warning
REVOKE IF EXISTS UPDATE, SELECT ON wl14690.* FROM unknown_user IGNORE UNKNOWN USER;
--echo # missing privileges and target user
REVOKE IF EXISTS PROXY ON u1 FROM unknown_user IGNORE UNKNOWN USER;
--source include/show_binlog_events.inc

--echo # FR1.6.1: REVOKE IF EXISTS ... IGNORE UNKNOWN USER with multiple target
--echo #          user (present) and privilege being revoked is granted
GRANT SELECT, INSERT (i) ON wl14690.t TO u1, u2;
SHOW GRANTS FOR u1;
SHOW GRANTS FOR u2;
RESET MASTER;
REVOKE IF EXISTS INSERT (i) ON wl14690.t FROM u1, u2 IGNORE UNKNOWN USER;
REVOKE IF EXISTS TABLE_ENCRYPTION_ADMIN,XA_RECOVER_ADMIN ON *.* FROM u1, u3
IGNORE UNKNOWN USER;
--source include/show_binlog_events.inc
--echo # INSERT should be revoked
SHOW GRANTS FOR u1;
SHOW GRANTS FOR u2;

--echo # FR1.6.2: REVOKE IF EXISTS ... IGNORE UNKNOWN USER with multiple target
--echo #          user (present) and privilege being revoked is not granted
RESET MASTER;
REVOKE IF EXISTS DELETE, SELECT ON wl14690.* FROM u1, u2, u3
IGNORE UNKNOWN USER;
REVOKE IF EXISTS SYSTEM_VARIABLES_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN
ON *.* FROM u1, u2 IGNORE UNKNOWN USER;
SHOW GRANTS FOR u1;
SHOW GRANTS FOR u2;
--source include/show_binlog_events.inc

--echo # FR1.6.3: REVOKE IF EXISTS ... IGNORE UNKNOWN USER with multiple target
--echo #          user (not present) and privilege being revoked is granted
RESET MASTER;
REVOKE IF EXISTS SELECT ON wl14690.t FROM u1, unknown_user IGNORE UNKNOWN USER;
--source include/show_binlog_events.inc

--echo #
--echo # Bug #33899136: WL#14690 Revoking illegal privilege with IF EXISTS
--echo # doesn't issue warning
--echo #

RESET MASTER;
--error ER_ILLEGAL_PRIVILEGE_LEVEL
REVOKE DYNAMIC_PRIV1, DYNAMIC_PRIV2 ON wl14690.* FROM u1;
--echo # should report warning
REVOKE IF EXISTS DYNAMIC_PRIV1, DYNAMIC_PRIV2 ON wl14690.* FROM u1;
--error ER_NONEXISTING_GRANT
REVOKE IF EXISTS DYNAMIC_PRIV1, DYNAMIC_PRIV2 ON wl14690.* FROM unknown_user;
--error ER_ILLEGAL_PRIVILEGE_LEVEL
REVOKE DYNAMIC_PRIV1, DYNAMIC_PRIV2 ON wl14690.* FROM unknown_user IGNORE UNKNOWN USER;
--echo # should report warnings
REVOKE IF EXISTS DYNAMIC_PRIV1, DYNAMIC_PRIV2 ON wl14690.* FROM unknown_user IGNORE UNKNOWN USER;
--source include/show_binlog_events.inc

--echo #
--echo # Bug #33899156: WL#14690 Revoking mandatory role with IF EXISTS doesn't
--echo # issue warning
--echo #

SET GLOBAL mandatory_roles=r1;
RESET MASTER;
--error ER_MANDATORY_ROLE
REVOKE r1 FROM u1;
--error ER_MANDATORY_ROLE
REVOKE r1 FROM r2;
--error ER_MANDATORY_ROLE
REVOKE r1 FROM u1,u2,u3,r2;
REVOKE IF EXISTS r1 FROM u1;
REVOKE IF EXISTS r1 FROM r2;
REVOKE IF EXISTS r1 FROM u1,u2,u3,r2;
--source include/show_binlog_events.inc
SET GLOBAL mandatory_roles=default;
SET GLOBAL partial_revokes=default;

#cleanup
DROP USER u1,u2,u3,u4;
DROP ROLE r1,r2;
DROP DATABASE wl14690;