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