1--source include/not_embedded.inc
2
3--echo #
4--echo # MDEV-21704 Add a new JSON field "version_id" into mysql.global_priv.priv
5--echo #
6
7SET @super_acl_100500= 1 << 15;
8SELECT HEX(@super_acl_100500);
9
10SET @all_known_privileges_100500= (1 << 30) - 1;
11SELECT HEX(@all_known_privileges_100500);
12
13CREATE USER user1@localhost;
14GRANT ALL PRIVILEGES ON *.* TO user1@localhost WITH GRANT OPTION;
15SET @all_known_privileges_current=(SELECT CAST(json_value(Priv, '$.access') AS UNSIGNED) FROM mysql.global_priv WHERE host='localhost' and user='user1');
16DROP USER user1@localhost;
17SELECT HEX(@all_known_privileges_current);
18
19
20CREATE USER bad_access1@localhost;
21UPDATE
22  mysql.global_priv
23SET
24  Priv=json_set(Priv, '$.access',@all_known_privileges_current+1)
25WHERE
26  host='localhost' and user='bad_access1';
27FLUSH PRIVILEGES;
28SHOW GRANTS FOR bad_access1@localhost;
29DROP USER bad_access1@localhost;
30
31
32CREATE USER bad_version_id_1000000@localhost;
33GRANT ALL PRIVILEGES ON *.* to bad_version_id_1000000@localhost;
34SHOW GRANTS FOR bad_version_id_1000000@localhost;
35UPDATE
36  mysql.global_priv
37SET
38  Priv=json_set(Priv, '$.version_id',1000000)
39WHERE
40  host='localhost' and user='bad_version_id_1000000';
41FLUSH PRIVILEGES;
42SHOW GRANTS FOR bad_version_id_1000000@localhost;
43DROP USER bad_version_id_1000000@localhost;
44
45
46CREATE USER bad_version_id_minus_3@localhost;
47GRANT ALL PRIVILEGES ON *.* to bad_version_id_minus_3@localhost;
48SHOW GRANTS FOR bad_version_id_minus_3@localhost;
49UPDATE
50  mysql.global_priv
51SET
52  Priv=json_set(Priv, '$.version_id',-3)
53WHERE
54  host='localhost' and user='bad_version_id_minus_3';
55FLUSH PRIVILEGES;
56SHOW GRANTS FOR bad_version_id_minus_3@localhost;
57DROP USER bad_version_id_minus_3@localhost;
58
59CREATE USER bad_version_id_100300@localhost;
60GRANT ALL PRIVILEGES ON *.* to bad_version_id_100300@localhost;
61SHOW GRANTS FOR bad_version_id_100300@localhost;
62UPDATE
63  mysql.global_priv
64SET
65  Priv=json_set(Priv, '$.version_id',100300)
66WHERE
67  host='localhost' and user='bad_version_id_100300';
68FLUSH PRIVILEGES;
69SHOW GRANTS FOR bad_version_id_100300@localhost;
70DROP USER bad_version_id_100300@localhost;
71
72
73CREATE USER good_version_id_100400@localhost;
74GRANT ALL PRIVILEGES ON *.* to good_version_id_100400@localhost;
75SHOW GRANTS FOR good_version_id_100400@localhost;
76UPDATE
77  mysql.global_priv
78SET
79  Priv=json_set(Priv, '$.version_id',100400, '$.access', @all_known_privileges_100500)
80WHERE
81  host='localhost' and user='good_version_id_100400';
82FLUSH PRIVILEGES;
83SHOW GRANTS FOR good_version_id_100400@localhost;
84# Testing that it's missing only "REPLICATION MASTER ADMIN".
85# Should report ALL PRIVILEGES after GRANT REPLICATION MASTER ADMIN:
86GRANT REPLICATION MASTER ADMIN ON *.* TO good_version_id_100400@localhost;
87SHOW GRANTS FOR good_version_id_100400@localhost;
88DROP USER good_version_id_100400@localhost;
89
90
91CREATE USER good_version_id_100500@localhost;
92GRANT SUPER  ON *.* to good_version_id_100500@localhost;
93SHOW GRANTS FOR good_version_id_100500@localhost;
94UPDATE
95  mysql.global_priv
96SET
97  Priv=json_set(Priv, '$.version_id',100500)
98WHERE
99  host='localhost' and user='good_version_id_100500';
100FLUSH PRIVILEGES;
101SHOW GRANTS FOR good_version_id_100500@localhost;
102DROP USER good_version_id_100500@localhost;
103
104
105--let SEARCH_FILE=$MYSQLTEST_VARDIR/tmp/system_mysql_db_error_log.err
106
107--let SEARCH_PATTERN= Warning.*'user' entry 'bad_access1@localhost' has a wrong 'access' value.*version_id=
108--source include/search_pattern_in_file.inc
109
110--let SEARCH_PATTERN= Warning.*'user' entry 'bad_version_id_1000000@localhost' has a wrong 'version_id' value 1000000
111--source include/search_pattern_in_file.inc
112
113--let SEARCH_PATTERN= Warning.*'user' entry 'bad_version_id_minus_3@localhost' has a wrong 'version_id' value -3
114--source include/search_pattern_in_file.inc
115
116--let SEARCH_PATTERN= Warning.*'user' entry 'bad_version_id_100300@localhost' has a wrong 'version_id' value 100300
117--source include/search_pattern_in_file.inc
118