203 lines
7.9 KiB
Plaintext
203 lines
7.9 KiB
Plaintext
# The include statement below is a temp one for tests that are yet to
|
|
|
|
#be ported to run with InnoDB,
|
|
#but needs to be kept for tests that would need MyISAM in future.
|
|
--source include/force_myisam_default.inc
|
|
|
|
# Grant tests not performed with embedded server
|
|
--source include/not_embedded.inc
|
|
|
|
--source include/have_debug.inc
|
|
|
|
--echo #
|
|
--echo # WL#9262: All system tables should support 32 character length user names
|
|
--echo #
|
|
|
|
call mtr.add_suppression("Cannot load from mysql.*. The table is probably corrupted");
|
|
|
|
CREATE USER user_name_robert_golebiowski1234@oh_my_gosh_this_is_a_long_hostname_look_at_it_it_has_60_char;
|
|
GRANT ALL PRIVILEGES ON *.* TO user_name_robert_golebiowski1234@oh_my_gosh_this_is_a_long_hostname_look_at_it_it_has_60_char WITH GRANT OPTION;
|
|
|
|
CREATE USER user_name_robert_golebiowski1234@localhost;
|
|
GRANT ALL PRIVILEGES ON *.* TO user_name_robert_golebiowski1234@localhost WITH GRANT OPTION;
|
|
|
|
CREATE USER some_user@localhost;
|
|
|
|
connect (con_1, localhost, user_name_robert_golebiowski1234,,);
|
|
|
|
--echo # This will change CURRENT_USER from user_name_robert_golebiowski1234@localhost to
|
|
--echo # user_name_robert_golebiowski1234@oh_my_gosh_this_is_a_long_hostname_look_at_it_it_has_60_char
|
|
--echo # We have to do this in the server code as we are not able to simulate connecting to
|
|
--echo # such a host from MTR
|
|
SET DEBUG='+d,wl_9262_set_max_length_hostname';
|
|
FLUSH PRIVILEGES;
|
|
SET DEBUG='-d,wl_9262_set_max_length_hostname';
|
|
SELECT CURRENT_USER();
|
|
|
|
CREATE DATABASE db_1;
|
|
CREATE TABLE db_1.test_table(ID INT);
|
|
|
|
--echo # This should just work and Grantor should not be truncated
|
|
GRANT SELECT ON db_1.test_table TO some_user@localhost;
|
|
|
|
SELECT Grantor FROM mysql.tables_priv WHERE USER = 'some_user';
|
|
SELECT LENGTH(Grantor) FROM mysql.tables_priv WHERE USER = 'some_user';
|
|
|
|
DROP USER user_name_robert_golebiowski1234@oh_my_gosh_this_is_a_long_hostname_look_at_it_it_has_60_char;
|
|
DROP USER user_name_robert_golebiowski1234@localhost;
|
|
DROP USER some_user@localhost;
|
|
DROP DATABASE db_1;
|
|
|
|
--connection default
|
|
--disconnect con_1
|
|
|
|
--echo #Make sure CURRENT_USER is root@localhost
|
|
SELECT CURRENT_USER();
|
|
|
|
--echo # Changing mysql.tables_priv.Grantor column to char(77) - i.e. old layout (5.7.12)
|
|
SET @orig_sql_mode= @@sql_mode;
|
|
SET sql_mode='';
|
|
ALTER TABLE mysql.tables_priv
|
|
MODIFY Grantor char(77) DEFAULT '' NOT NULL;
|
|
SET sql_mode= @orig_sql_mode;
|
|
|
|
--echo # Now let us do the same for the procedure privileges
|
|
--echo # Changing mysql.procs_priv.Grantor column to char(77) - i.e. old layout (5.7.12)
|
|
SET @orig_sql_mode= @@sql_mode;
|
|
SET sql_mode='';
|
|
ALTER TABLE mysql.procs_priv
|
|
MODIFY Grantor char(77) DEFAULT '' NOT NULL;
|
|
SET sql_mode= @orig_sql_mode;
|
|
|
|
CREATE DATABASE db_1;
|
|
CREATE TABLE db_1.test_table(ID INT);
|
|
|
|
--error ER_CANNOT_LOAD_FROM_TABLE_V2
|
|
CREATE USER user_name_robert_golebiowski@localhost;
|
|
--error ER_PASSWORD_NO_MATCH
|
|
GRANT ALL PRIVILEGES ON *.* TO user_name_robert_golebiowski@localhost WITH GRANT OPTION;
|
|
|
|
--echo #Create user with length > 77 (username length + hostname length)
|
|
--error ER_CANNOT_LOAD_FROM_TABLE_V2
|
|
CREATE USER user_name_robert_golebiowski@oh_my_gosh_this_is_a_long_hostname_look_at_it_it_has_60_char;
|
|
--error ER_PASSWORD_NO_MATCH
|
|
GRANT ALL PRIVILEGES ON *.* TO user_name_robert_golebiowski@oh_my_gosh_this_is_a_long_hostname_look_at_it_it_has_60_char WITH GRANT OPTION;
|
|
|
|
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
|
|
--error ER_ACCESS_DENIED_ERROR
|
|
connect (con_grant,localhost,user_name_robert_golebiowski,,);
|
|
|
|
--echo # This will change CURRENT_USER from user_name_robert_golebiowski@localhost to
|
|
--echo # user_name_robert_golebiowski@oh_my_gosh_this_is_a_long_hostname_look_at_it_it_has_60_char
|
|
--echo # We have to do this in the server code as we are not able to simulate connecting to
|
|
--echo # such a host from MTR
|
|
SET DEBUG='+d,wl_9262_set_max_length_hostname';
|
|
FLUSH PRIVILEGES;
|
|
SET DEBUG='-d,wl_9262_set_max_length_hostname';
|
|
SELECT CURRENT_USER();
|
|
|
|
--error ER_CANNOT_LOAD_FROM_TABLE_V2
|
|
CREATE USER lucky_user@localhost;
|
|
|
|
--echo # Now we should get error as the length of the Grantor (user_name_robert_golebiowski@oh_my_gosh_this_is_a_long_hostname_look_at_it_it_has_60_char - 93 chars)
|
|
--echo # is longer then mysql.tables_priv.Grantor column length - 77 chars)
|
|
--error ER_PASSWORD_NO_MATCH
|
|
GRANT SELECT ON db_1.test_table TO lucky_user@localhost;
|
|
|
|
CREATE PROCEDURE db_1.p_def() SQL SECURITY DEFINER SELECT 1;
|
|
|
|
--echo # We should get error as the length of the Grantor (user_name_robert_golebiowski@oh_my_gosh_this_is_a_long_hostname_look_at_it_it_has_60_char - 93 chars)
|
|
--echo # is longer then mysql.procs_priv.Grantor column length - 77 chars)
|
|
--error ER_PASSWORD_NO_MATCH
|
|
GRANT EXECUTE ON PROCEDURE db_1.p_def TO lucky_user@localhost;
|
|
|
|
--echo #Now we make sure if usernames with length of 77 or less work with
|
|
--echo #this old db schema
|
|
|
|
--echo #First create user of length 77 chars.
|
|
--error ER_CANNOT_LOAD_FROM_TABLE_V2
|
|
CREATE USER robert_golebiows@oh_my_gosh_this_is_a_long_hostname_look_at_it_it_has_60_char;
|
|
--error ER_PASSWORD_NO_MATCH
|
|
GRANT ALL PRIVILEGES ON *.* TO robert_golebiows@oh_my_gosh_this_is_a_long_hostname_look_at_it_it_has_60_char WITH GRANT OPTION;
|
|
--echo #Create user for connecting
|
|
--error ER_CANNOT_LOAD_FROM_TABLE_V2
|
|
CREATE USER robert_golebiows@localhost;
|
|
--error ER_PASSWORD_NO_MATCH
|
|
GRANT ALL PRIVILEGES ON *.* TO robert_golebiows@localhost WITH GRANT OPTION;
|
|
|
|
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
|
|
--error ER_ACCESS_DENIED_ERROR
|
|
connect (con_grant_2,localhost,robert_golebiows,,);
|
|
|
|
--echo # Again we change localhost to oh_my_gosh_this_is_a_long_hostname_look_at_it_it_has_60_char
|
|
--echo # for CURRENT_USER
|
|
SET DEBUG='+d,wl_9262_set_max_length_hostname';
|
|
FLUSH PRIVILEGES;
|
|
SET DEBUG='-d,wl_9262_set_max_length_hostname';
|
|
SELECT CURRENT_USER();
|
|
|
|
--echo # Now the CURRENT_USER is robert_golebiows@oh_my_gosh_this_is_a_long_hostname_look_at_it_it_has_60_char
|
|
|
|
--echo #Now it should pass as mysql.tables_priv.Grantor is 77 chars
|
|
--error ER_PASSWORD_NO_MATCH
|
|
GRANT SELECT ON db_1.test_table TO lucky_user@localhost;
|
|
SELECT Grantor FROM mysql.tables_priv WHERE User = 'lucky_user';
|
|
SELECT LENGTH(Grantor) FROM mysql.tables_priv WHERE User = 'lucky_user';
|
|
|
|
--echo #Now it should pass as mysql.procs_priv.Grantor is 77 chars
|
|
--error ER_PASSWORD_NO_MATCH
|
|
GRANT EXECUTE ON PROCEDURE db_1.p_def TO lucky_user@localhost;
|
|
SELECT Grantor FROM mysql.procs_priv WHERE User = 'lucky_user';
|
|
SELECT LENGTH(Grantor) FROM mysql.procs_priv WHERE User = 'lucky_user';
|
|
|
|
--echo #cleanup
|
|
|
|
--echo Restore mysql.procs_priv
|
|
SET @orig_sql_mode= @@sql_mode;
|
|
SET sql_mode='';
|
|
ALTER TABLE mysql.procs_priv
|
|
MODIFY Grantor char(93) DEFAULT '' NOT NULL;
|
|
SET sql_mode= @orig_sql_mode;
|
|
|
|
--echo Restore mysql.tables_priv
|
|
SET @orig_sql_mode= @@sql_mode;
|
|
SET sql_mode='';
|
|
ALTER TABLE mysql.tables_priv
|
|
MODIFY Grantor char(93) DEFAULT '' NOT NULL;
|
|
SET sql_mode= @orig_sql_mode;
|
|
|
|
--connection default
|
|
|
|
DROP PROCEDURE db_1.p_def;
|
|
DROP DATABASE db_1;
|
|
|
|
--echo ###
|
|
--echo ### Bug#27302337: MYSQL ABORTS WITHOUT PROPER ERROR MESSAGE ON
|
|
--echo ### STARTUP IF GRANT TABLES ARE CORRUPT
|
|
--echo ###
|
|
|
|
let $DDIR= `select @@datadir`;
|
|
let server_log= $MYSQLTEST_VARDIR/log/mysqld.1.err;
|
|
|
|
--echo # Shutdown the server
|
|
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
--shutdown_server
|
|
--source include/wait_until_disconnected.inc
|
|
|
|
--echo # Start the server to simulate acl_init() failure
|
|
--error 1
|
|
--exec $MYSQLD_CMD --datadir=$DDIR --debug=d,simulate_acl_init_failure --loose-console > $server_log 2>&1
|
|
|
|
let SEARCH_FILE=$server_log;
|
|
let SEARCH_PATTERN=Table 'user' is marked as crashed and should be repaired;
|
|
--source include/search_pattern.inc
|
|
let SEARCH_PATTERN=Fatal error: Failed to initialize ACL/grant/time zones structures or failed to remove temporary table files.;
|
|
--source include/search_pattern.inc
|
|
let SEARCH_PATTERN=Aborting;
|
|
--source include/search_pattern.inc
|
|
|
|
--echo # Restart the server
|
|
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
--enable_reconnect
|
|
--source include/wait_until_connected_again.inc
|