mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-30 04:26:45 +03:00 
			
		
		
		
	When plugin=mysql_native_password (or mysql_old_password) take the password from *either* password *or* authentication_string, whichever is set. This makes no sense, but alas, that's what MySQL-5.6 does.
		
			
				
	
	
		
			455 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			455 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # This test is to check various cases of connections
 | |
| # with right and wrong password, with and without database
 | |
| # Unfortunately the check is incomplete as we can't connect without database
 | |
| 
 | |
| # This test makes no sense with the embedded server
 | |
| --source include/not_embedded.inc
 | |
| 
 | |
| # check that CSV engine was compiled in, as the test relies on the presence
 | |
| # of the log tables (which are CSV-based). By connect mysql; show tables;
 | |
| --source include/have_csv.inc
 | |
| 
 | |
| # Save the initial number of concurrent sessions
 | |
| --source include/count_sessions.inc
 | |
| 
 | |
| 
 | |
| --disable_warnings
 | |
| drop table if exists t1,t2;
 | |
| --enable_warnings
 | |
| 
 | |
| #connect (con1,localhost,root,,"");
 | |
| #show tables;
 | |
| connect (con1,localhost,root,,mysql);
 | |
| show tables;
 | |
| connect (con2,localhost,root,,test);
 | |
| show tables;
 | |
| 
 | |
| --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
 | |
| --error ER_ACCESS_DENIED_ERROR
 | |
| connect (fail_con,localhost,root,z,test2);
 | |
| --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
 | |
| --error ER_ACCESS_DENIED_ERROR
 | |
| connect (fail_con,localhost,root,z,);
 | |
| 
 | |
| connection default;
 | |
| disconnect con1;
 | |
| disconnect con2;
 | |
| 
 | |
| grant ALL on *.* to test@localhost identified by "gambling";
 | |
| grant ALL on *.* to test@127.0.0.1 identified by "gambling";
 | |
| 
 | |
| # Now check this user with different databases
 | |
| #connect (con1,localhost,test,gambling,"");
 | |
| #show tables;
 | |
| connect (con3,localhost,test,gambling,mysql);
 | |
| show tables;
 | |
| connect (con4,localhost,test,gambling,test);
 | |
| show tables;
 | |
| 
 | |
| connection default;
 | |
| disconnect con3;
 | |
| disconnect con4;
 | |
| 
 | |
| --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
 | |
| --error ER_ACCESS_DENIED_ERROR
 | |
| connect (fail_con,localhost,test,,test2);
 | |
| --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
 | |
| --error ER_ACCESS_DENIED_ERROR
 | |
| # Need to protect "" within '' so it's interpreted literally
 | |
| connect (fail_con,localhost,test,,'""');
 | |
| --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
 | |
| --error ER_ACCESS_DENIED_ERROR
 | |
| connect (fail_con,localhost,test,zorro,test2);
 | |
| --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
 | |
| --error ER_ACCESS_DENIED_ERROR
 | |
| connect (fail_con,localhost,test,zorro,);
 | |
| 
 | |
| # check if old password version also works
 | |
| update mysql.user set password=old_password("gambling2") where user=_binary"test";
 | |
| flush privileges;
 | |
| 
 | |
| connect (con10,localhost,test,gambling2,);
 | |
| connect (con5,localhost,test,gambling2,mysql);
 | |
| connection con5;
 | |
| set password="";
 | |
| --error ER_PASSWD_LENGTH
 | |
| set password='gambling3';
 | |
| set password=old_password('gambling3');
 | |
| show tables;
 | |
| connect (con6,localhost,test,gambling3,test);
 | |
| show tables;
 | |
| 
 | |
| connection default;
 | |
| disconnect con10;
 | |
| disconnect con5;
 | |
| disconnect con6;
 | |
| 
 | |
| --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
 | |
| --error ER_ACCESS_DENIED_ERROR
 | |
| connect (fail_con,localhost,test,,test2);
 | |
| --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
 | |
| --error ER_ACCESS_DENIED_ERROR
 | |
| connect (fail_con,localhost,test,,);
 | |
| --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
 | |
| --error ER_ACCESS_DENIED_ERROR
 | |
| connect (fail_con,localhost,test,zorro,test2);
 | |
| --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
 | |
| --error ER_ACCESS_DENIED_ERROR
 | |
| connect (fail_con,localhost,test,zorro,);
 | |
| 
 | |
| 
 | |
| # remove user 'test' so that other tests which may use 'test'
 | |
| # do not depend on this test.
 | |
| delete from mysql.user where user=_binary"test";
 | |
| flush privileges;
 | |
| 
 | |
| #
 | |
| # Bug#12517 Clear user variables and replication events before
 | |
| #           closing temp tables in thread cleanup.
 | |
| connect (con7,localhost,root,,test);
 | |
| connection con7;
 | |
| let $connection_id= `select connection_id()`;
 | |
| create table t1 (id integer not null auto_increment primary key);
 | |
| create temporary table t2(id integer not null auto_increment primary key);
 | |
| set @id := 1;
 | |
| delete from t1 where id like @id;
 | |
| connection default;
 | |
| disconnect con7;
 | |
| # Wait till the session con7 is disconnected
 | |
| let $wait_condition =
 | |
|   SELECT COUNT(*) = 0
 | |
|   FROM information_schema.processlist
 | |
|   WHERE  id = '$connection_id';
 | |
| --source include/wait_condition.inc
 | |
| drop table t1;
 | |
| 
 | |
| --echo # ------------------------------------------------------------------
 | |
| --echo # -- End of 4.1 tests
 | |
| --echo # ------------------------------------------------------------------
 | |
| 
 | |
| ###########################################################################
 | |
| 
 | |
| --echo
 | |
| --echo # -- Bug#33507: Event scheduler creates more threads than max_connections
 | |
| --echo # -- which results in user lockout.
 | |
| 
 | |
| --echo
 | |
| GRANT USAGE ON *.* TO mysqltest_u1@localhost;
 | |
| 
 | |
| # NOTE: if the test case fails sporadically due to spurious connections,
 | |
| # consider disabling all users.
 | |
| 
 | |
| --echo
 | |
| let $saved_max_connections = `SELECT @@global.max_connections`;
 | |
| SET GLOBAL max_connections = 3;
 | |
| SET GLOBAL event_scheduler = ON;
 | |
| 
 | |
| --echo
 | |
| --echo # -- Waiting for Event Scheduler to start...
 | |
| let $wait_condition =
 | |
|   SELECT COUNT(*) = 1
 | |
|   FROM information_schema.processlist
 | |
|   WHERE user = 'event_scheduler';
 | |
| --source include/wait_condition.inc
 | |
| 
 | |
| --echo
 | |
| --echo # -- Disconnecting default connection...
 | |
| --disconnect default
 | |
| 
 | |
| --echo
 | |
| --echo # -- Check that we allow exactly three user connections, no matter how
 | |
| --echo # -- many threads are running.
 | |
| 
 | |
| --echo
 | |
| --echo # -- Connecting (1)...
 | |
| let $con_name = con_1;
 | |
| let $con_user_name = mysqltest_u1;
 | |
| --source include/connect2.inc
 | |
| 
 | |
| --echo
 | |
| --echo # -- Connecting (2)...
 | |
| let $con_name = con_2;
 | |
| let $con_user_name = mysqltest_u1;
 | |
| --source include/connect2.inc
 | |
| 
 | |
| --echo
 | |
| --echo # -- Connecting (3)...
 | |
| let $con_name = con_3;
 | |
| let $con_user_name = mysqltest_u1;
 | |
| --source include/connect2.inc
 | |
| 
 | |
| --echo
 | |
| --echo # -- Connecting (4) [should fail]...
 | |
| let $con_name = con_4;
 | |
| let $con_user_name = mysqltest_u1;
 | |
| let $wait_timeout = 5;
 | |
| --source include/connect2.inc
 | |
| 
 | |
| --echo
 | |
| --echo # -- Check that we allow one extra SUPER-user connection.
 | |
| 
 | |
| --echo
 | |
| --echo # -- Connecting super (1)...
 | |
| let $con_name = con_super_1;
 | |
| let $con_user_name = root;
 | |
| --source include/connect2.inc
 | |
| 
 | |
| --echo
 | |
| --echo # -- Connecting super (2) [should fail]...
 | |
| let $con_name = con_super_2;
 | |
| let $con_user_name = root;
 | |
| let $wait_timeout = 5;
 | |
| --source include/connect2.inc
 | |
| 
 | |
| --echo
 | |
| --echo # -- Ensure that we have Event Scheduler thread, 3 ordinary user
 | |
| --echo # -- connections and one extra super-user connection.
 | |
| SELECT user FROM information_schema.processlist ORDER BY id;
 | |
| 
 | |
| --echo
 | |
| --echo # -- Resetting variables...
 | |
| --eval SET GLOBAL max_connections = $saved_max_connections
 | |
| 
 | |
| --echo
 | |
| --echo # -- Stopping Event Scheduler...
 | |
| SET GLOBAL event_scheduler = OFF;
 | |
| 
 | |
| --echo
 | |
| --echo # -- Waiting for Event Scheduler to stop...
 | |
| let $wait_condition =
 | |
|   SELECT COUNT(*) = 0
 | |
|   FROM information_schema.processlist
 | |
|   WHERE user = 'event_scheduler';
 | |
| --source include/wait_condition.inc
 | |
| 
 | |
| --echo
 | |
| --echo # -- That's it. Closing connections...
 | |
| --disconnect con_1
 | |
| --disconnect con_2
 | |
| --disconnect con_3
 | |
| --disconnect con_super_1
 | |
| 
 | |
| --echo
 | |
| --echo # -- Restoring default connection...
 | |
| --connect (default,localhost,root,,test)
 | |
| 
 | |
| --echo
 | |
| --echo # -- Waiting for connections to close...
 | |
| let $wait_condition =
 | |
|   SELECT COUNT(*) = 1
 | |
|   FROM information_schema.processlist
 | |
|   WHERE db = 'test';
 | |
| --source include/wait_condition.inc
 | |
| 
 | |
| --echo
 | |
| DROP USER mysqltest_u1@localhost;
 | |
| 
 | |
| --echo
 | |
| --echo # -- End of Bug#33507.
 | |
| --echo
 | |
| 
 | |
| ###########################################################################
 | |
| 
 | |
| --echo # -- Bug#35074: max_used_connections is not correct.
 | |
| --echo
 | |
| 
 | |
| FLUSH STATUS;
 | |
| 
 | |
| --echo
 | |
| SHOW STATUS LIKE 'max_used_connections';
 | |
| 
 | |
| --echo
 | |
| --echo # -- Starting Event Scheduler...
 | |
| SET GLOBAL event_scheduler = ON;
 | |
| 
 | |
| --echo # -- Waiting for Event Scheduler to start...
 | |
| --source include/running_event_scheduler.inc
 | |
| 
 | |
| # NOTE: We should use a new connection here instead of reconnect in order to
 | |
| # avoid races (we can not for sure when the connection being disconnected is
 | |
| # actually disconnected on the server).
 | |
| 
 | |
| --echo
 | |
| --echo # -- Opening a new connection to check max_used_connections...
 | |
| --connect (con_1,localhost,root)
 | |
| 
 | |
| --echo
 | |
| --echo # -- Check that max_used_connections hasn't changed.
 | |
| SHOW STATUS LIKE 'max_used_connections';
 | |
| 
 | |
| --echo
 | |
| --echo # -- Closing new connection...
 | |
| --disconnect con_1
 | |
| --connection default
 | |
| 
 | |
| --echo
 | |
| --echo # -- Stopping Event Scheduler...
 | |
| SET GLOBAL event_scheduler = OFF;
 | |
| 
 | |
| --echo # -- Waiting for Event Scheduler to stop...
 | |
| --source include/no_running_events.inc
 | |
| 
 | |
| --echo
 | |
| --echo # -- End of Bug#35074.
 | |
| --echo
 | |
| 
 | |
| # Test connections to the extra port.
 | |
| 
 | |
| connect(extracon,127.0.0.1,root,,test,$MASTER_EXTRA_PORT,);
 | |
| connection extracon;
 | |
| SELECT 'Connection on extra port ok';
 | |
| 
 | |
| connect(extracon2,127.0.0.1,root,,test,$MASTER_EXTRA_PORT,);
 | |
| connection extracon2;
 | |
| SELECT 'Connection on extra port 2 ok';
 | |
| 
 | |
| --disable_abort_on_error
 | |
| --disable_result_log
 | |
| --disable_query_log
 | |
| connect(extracon3,127.0.0.1,root,,test,$MASTER_EXTRA_PORT,);
 | |
| --enable_query_log
 | |
| --enable_result_log
 | |
| --enable_abort_on_error
 | |
| let $error = $mysql_errno;
 | |
| if (!$error)
 | |
| {
 | |
|   --echo # -- Error: managed to establish more than --extra-max-connections + 1 connections
 | |
| }
 | |
| if ($error)
 | |
| {
 | |
|   --echo # -- Success: more than --extra-max-connections + 1 normal connections not possible
 | |
| }
 | |
| 
 | |
| ###########################################################################
 | |
| 
 | |
| --echo #
 | |
| --echo # -- Bug#49752: 2469.126.2 unintentionally breaks authentication
 | |
| --echo #               against MySQL 5.1 server
 | |
| --echo #
 | |
| 
 | |
| GRANT ALL ON test.* TO 'O1234567890123456789012345678901234567890123456789012345678901234567890123456789'@'localhost' IDENTIFIED BY 'test123';
 | |
| 
 | |
| FLUSH PRIVILEGES;
 | |
| 
 | |
| --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
 | |
| connect (con1,localhost,O1234567890123456789012345678901234567890123456789012345678901234567890123456789x,test123,test);
 | |
| disconnect con1;
 | |
| 
 | |
| connection default;
 | |
| 
 | |
| DROP USER 'O1234567890123456789012345678901234567890123456789012345678901234567890123456789'@'localhost';
 | |
| 
 | |
| FLUSH PRIVILEGES;
 | |
| 
 | |
| --echo #
 | |
| --echo # -- End of Bug#49752
 | |
| --echo #
 | |
| 
 | |
| --echo # ------------------------------------------------------------------
 | |
| --echo # -- End of 5.1 tests
 | |
| --echo # ------------------------------------------------------------------
 | |
| 
 | |
| --disconnect extracon
 | |
| --disconnect extracon2
 | |
| --connection default
 | |
| 
 | |
| #
 | |
| # A couple of plugin tests - for builtin plugins only
 | |
| #
 | |
| CREATE USER mysqltest_up1 IDENTIFIED VIA mysql_native_password using '*E8D46CE25265E545D225A8A6F1BAF642FEBEE5CB';
 | |
| CREATE USER mysqltest_up2 IDENTIFIED VIA mysql_old_password using '09301740536db389';
 | |
| 
 | |
| --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
 | |
| --error ER_ACCESS_DENIED_ERROR
 | |
| connect(pcon1,localhost,mysqltest_up1,foo,,$MASTER_MYPORT,);
 | |
| --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
 | |
| connect(pcon2,localhost,mysqltest_up1,bar,,$MASTER_MYPORT,);
 | |
| connection pcon2;
 | |
| select user(), current_user();
 | |
| disconnect pcon2;
 | |
| 
 | |
| --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
 | |
| --error ER_ACCESS_DENIED_ERROR
 | |
| connect(pcon3,localhost,mysqltest_up2,newpw,,$MASTER_MYPORT,);
 | |
| --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
 | |
| connect(pcon4,localhost,mysqltest_up2,oldpw,,$MASTER_MYPORT,);
 | |
| connection pcon4;
 | |
| select user(), current_user();
 | |
| disconnect pcon4;
 | |
| 
 | |
| #
 | |
| # lp:683112 Maria 5.2 incorrectly reports "(using password: NO)"
 | |
| #           even when password is specified
 | |
| #
 | |
| # test "access denied" error for nonexisting user with and without a password
 | |
| #
 | |
| --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
 | |
| --error ER_ACCESS_DENIED_ERROR
 | |
| connect(pcon5,localhost,mysqltest_nouser,newpw,,$MASTER_MYPORT,);
 | |
| --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
 | |
| --error ER_ACCESS_DENIED_ERROR
 | |
| connect(pcon5,localhost,mysqltest_nouser,,,$MASTER_MYPORT,);
 | |
| 
 | |
| connection default;
 | |
| 
 | |
| #
 | |
| # MDEV-6253 MySQL Users Break when Migrating from MySQL 5.1 to MariaDB 10.0.10
 | |
| #
 | |
| # cannot connect when password is set and plugin=mysql_native_password
 | |
| #
 | |
| update mysql.user set password=authentication_string, authentication_string=''
 | |
|                   where user like 'mysqltest_up_';
 | |
| select user, password, plugin, authentication_string from mysql.user
 | |
|                   where user like 'mysqltest_up_';
 | |
| flush privileges;                  
 | |
| 
 | |
| --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
 | |
| connect(pcon6,localhost,mysqltest_up1,bar,,$MASTER_MYPORT,);
 | |
| connection pcon6;
 | |
| select user(), current_user();
 | |
| disconnect pcon6;
 | |
| 
 | |
| --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
 | |
| connect(pcon7,localhost,mysqltest_up2,oldpw,,$MASTER_MYPORT,);
 | |
| connection pcon7;
 | |
| select user(), current_user();
 | |
| disconnect pcon7;
 | |
| connection default;
 | |
| 
 | |
| DROP USER mysqltest_up1@'%';
 | |
| DROP USER mysqltest_up2@'%';
 | |
| 
 | |
| # Wait till all disconnects are completed
 | |
| --source include/wait_until_count_sessions.inc
 | |
| 
 | |
| 
 | |
| --echo #
 | |
| --echo # BUG#1010351: New "via" keyword in 5.2+ can't be used as identifier anymore  
 | |
| --echo #
 | |
| create table t1 (via int);
 | |
| alter table t1 add key(via);
 | |
| drop table t1;
 | |
| 
 | |
| create table t1 (col1 int);
 | |
| alter table t1 add via int not null;
 | |
| drop table t1;
 | |
| 
 | |
| --disable_warnings
 | |
| drop procedure if exists p1;
 | |
| --enable_warnings
 | |
| 
 | |
| delimiter |;
 | |
| create procedure p1(x int)
 | |
| foo: loop
 | |
|   if x = 0 then
 | |
|     leave foo;
 | |
|   end if;
 | |
|   select 'test';
 | |
|   set x = x-1;
 | |
| end loop foo|
 | |
| 
 | |
| delimiter ;|
 | |
| call p1(2);
 | |
| drop procedure p1;
 | |
| 
 |