177 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			177 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | # | ||
|  | # Test behavior of various per-account limits (aka quotas) | ||
|  | # | ||
|  | 
 | ||
|  | # Requires privileges to be enabled | ||
|  | --source include/not_embedded.inc | ||
|  | 
 | ||
|  | # Save the initial number of concurrent sessions | ||
|  | --source include/count_sessions.inc | ||
|  | 
 | ||
|  | # Prepare play-ground | ||
|  | --disable_warnings | ||
|  | drop table if exists t1; | ||
|  | --enable_warnings | ||
|  | create table t1 (i int); | ||
|  | # Just be sure that nothing will bother us | ||
|  | delete from mysql.user where user like 'mysqltest\_%'; | ||
|  | delete from mysql.db where user like 'mysqltest\_%'; | ||
|  | delete from mysql.tables_priv where user like 'mysqltest\_%'; | ||
|  | delete from mysql.columns_priv where user like 'mysqltest\_%'; | ||
|  | flush privileges; | ||
|  | 
 | ||
|  | # Limits doesn't work with prepared statements (yet) | ||
|  | --disable_ps_protocol | ||
|  | 
 | ||
|  | # Test of MAX_QUERIES_PER_HOUR limit | ||
|  | grant usage on *.* to mysqltest_1@localhost with max_queries_per_hour 2; | ||
|  | # This ensures that counters are reset and makes test scheduling independent | ||
|  | flush user_resources; | ||
|  | connect (mqph, localhost, mysqltest_1,,); | ||
|  | connection mqph; | ||
|  | select * from t1; | ||
|  | select * from t1; | ||
|  | --error ER_USER_LIMIT_REACHED | ||
|  | select * from t1; | ||
|  | connect (mqph2, localhost, mysqltest_1,,); | ||
|  | connection mqph2; | ||
|  | --error ER_USER_LIMIT_REACHED | ||
|  | select * from t1; | ||
|  | # cleanup | ||
|  | connection default; | ||
|  | drop user mysqltest_1@localhost; | ||
|  | disconnect mqph; | ||
|  | disconnect mqph2; | ||
|  | 
 | ||
|  | # Test of MAX_UPDATES_PER_HOUR limit | ||
|  | grant usage on *.* to mysqltest_1@localhost with max_updates_per_hour 2; | ||
|  | flush user_resources; | ||
|  | connect (muph, localhost, mysqltest_1,,); | ||
|  | connection muph; | ||
|  | select * from t1; | ||
|  | select * from t1; | ||
|  | select * from t1; | ||
|  | delete from t1; | ||
|  | delete from t1; | ||
|  | --error ER_USER_LIMIT_REACHED | ||
|  | delete from t1; | ||
|  | select * from t1; | ||
|  | connect (muph2, localhost, mysqltest_1,,); | ||
|  | connection muph2; | ||
|  | --error ER_USER_LIMIT_REACHED | ||
|  | delete from t1; | ||
|  | select * from t1; | ||
|  | # Cleanup | ||
|  | connection default; | ||
|  | drop user mysqltest_1@localhost; | ||
|  | disconnect muph; | ||
|  | disconnect muph2; | ||
|  | 
 | ||
|  | # Test of MAX_CONNECTIONS_PER_HOUR limit | ||
|  | grant usage on *.* to mysqltest_1@localhost with max_connections_per_hour 2; | ||
|  | flush user_resources; | ||
|  | connect (mcph1, localhost, mysqltest_1,,); | ||
|  | connection mcph1; | ||
|  | select * from t1; | ||
|  | connect (mcph2, localhost, mysqltest_1,,); | ||
|  | connection mcph2; | ||
|  | select * from t1; | ||
|  | --replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK | ||
|  | --error ER_USER_LIMIT_REACHED | ||
|  | connect (mcph3, localhost, mysqltest_1,,); | ||
|  | # Old connection is still ok | ||
|  | select * from t1; | ||
|  | # Let us try to close old connections and try again. This will also test that | ||
|  | # counters are not thrown away if there are no connections for this user. | ||
|  | disconnect mcph1; | ||
|  | disconnect mcph2; | ||
|  | --replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK | ||
|  | --error ER_USER_LIMIT_REACHED | ||
|  | connect (mcph3, localhost, mysqltest_1,,); | ||
|  | # Cleanup | ||
|  | connection default; | ||
|  | drop user mysqltest_1@localhost; | ||
|  | 
 | ||
|  | # Test of MAX_USER_CONNECTIONS limit | ||
|  | # We need this to reset internal mqh_used variable | ||
|  | flush privileges; | ||
|  | grant usage on *.* to mysqltest_1@localhost with max_user_connections 2; | ||
|  | flush user_resources; | ||
|  | connect (muc1, localhost, mysqltest_1,,); | ||
|  | connection muc1; | ||
|  | select * from t1; | ||
|  | connect (muc2, localhost, mysqltest_1,,); | ||
|  | connection muc2; | ||
|  | select * from t1; | ||
|  | --replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK | ||
|  | --error ER_USER_LIMIT_REACHED | ||
|  | connect (muc3, localhost, mysqltest_1,,); | ||
|  | # Closing of one of connections should help | ||
|  | disconnect muc1; | ||
|  | connect (muc3, localhost, mysqltest_1,,); | ||
|  | select * from t1; | ||
|  | # Changing of limit should also help (and immediately) | ||
|  | connection default; | ||
|  | grant usage on *.* to mysqltest_1@localhost with max_user_connections 3; | ||
|  | flush user_resources; | ||
|  | connect (muc4, localhost, mysqltest_1,,); | ||
|  | connection muc4; | ||
|  | select * from t1; | ||
|  | --replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK | ||
|  | --error ER_USER_LIMIT_REACHED | ||
|  | connect (muc5, localhost, mysqltest_1,,); | ||
|  | # Clean up | ||
|  | connection default; | ||
|  | disconnect muc2; | ||
|  | disconnect muc3; | ||
|  | disconnect muc4; | ||
|  | drop user mysqltest_1@localhost; | ||
|  | 
 | ||
|  | # Now let us test interaction between global and per-account | ||
|  | # max_user_connections limits | ||
|  | select @@session.max_user_connections, @@global.max_user_connections; | ||
|  | # Local max_user_connections variable can't be set directly | ||
|  | # since this limit is per-account | ||
|  | --error ER_GLOBAL_VARIABLE | ||
|  | set session max_user_connections= 2; | ||
|  | # But it is ok to set global max_user_connections | ||
|  | set global max_user_connections= 2; | ||
|  | select @@session.max_user_connections, @@global.max_user_connections; | ||
|  | # Let us check that global limit works | ||
|  | grant usage on *.* to mysqltest_1@localhost; | ||
|  | flush user_resources; | ||
|  | connect (muca1, localhost, mysqltest_1,,); | ||
|  | connection muca1; | ||
|  | select @@session.max_user_connections, @@global.max_user_connections; | ||
|  | connect (muca2, localhost, mysqltest_1,,); | ||
|  | connection muca2; | ||
|  | select * from t1; | ||
|  | --replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK | ||
|  | --error ER_TOO_MANY_USER_CONNECTIONS | ||
|  | connect (muca3, localhost, mysqltest_1,,); | ||
|  | # Now we are testing that per-account limit prevails over gloabl limit | ||
|  | connection default; | ||
|  | grant usage on *.* to mysqltest_1@localhost with max_user_connections 3; | ||
|  | flush user_resources; | ||
|  | connect (muca3, localhost, mysqltest_1,,); | ||
|  | connection muca3; | ||
|  | select @@session.max_user_connections, @@global.max_user_connections; | ||
|  | --replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK | ||
|  | --error ER_USER_LIMIT_REACHED | ||
|  | connect (muca4, localhost, mysqltest_1,,); | ||
|  | # Cleanup | ||
|  | connection default; | ||
|  | disconnect muca1; | ||
|  | disconnect muca2; | ||
|  | disconnect muca3; | ||
|  | set global max_user_connections= 0; | ||
|  | drop user mysqltest_1@localhost; | ||
|  | --enable_ps_protocol | ||
|  | 
 | ||
|  | # Final cleanup | ||
|  | drop table t1; | ||
|  | 
 | ||
|  | # Wait till all disconnects are completed | ||
|  | --source include/wait_until_count_sessions.inc | ||
|  | 
 |