Current Path : /usr/opt/mysql57/mysql-test/t/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //usr/opt/mysql57/mysql-test/t/user_limits.test |
# # 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 set @orig_sql_mode= @@sql_mode; set sql_mode= (select replace(@@sql_mode,'NO_AUTO_CREATE_USER','')); # 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_VARIABLE_IS_READONLY 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; -- echo # -- echo # Bug #30578217 : ALTER USER IF EXISTS ... WITH_MAX_USER_CONNECTIONS 9999 NOT APPLIED CORRECTLY -- echo # # Test of MAX_USER_CONNECTIONS limit (using ALTER command) CREATE USER mysqltest_2@localhost WITH MAX_USER_CONNECTIONS 2; connect (muc1, localhost, mysqltest_2,,); connection muc1; connect (muc2, localhost, mysqltest_2,,); connection muc2; --replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK --error ER_USER_LIMIT_REACHED connect (muc3, localhost, mysqltest_2,,); # Closing of one of connections should help disconnect muc1; connect (muc3, localhost, mysqltest_2,,); # Changing of limit should also help (and immediately) # Increasing the MAX_USER_CONNECTIONS connection default; ALTER USER mysqltest_2@localhost WITH MAX_USER_CONNECTIONS 3; connect (muc4, localhost, mysqltest_2,,); connection muc4; --replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK --error ER_USER_LIMIT_REACHED connect (muc5, localhost, mysqltest_2,,); # Decreasing the MAX_USER_CONNECTIONS connection default; ALTER USER mysqltest_2@localhost WITH MAX_USER_CONNECTIONS 2; disconnect muc2; --replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK --error ER_USER_LIMIT_REACHED connect (muc2, localhost, mysqltest_2,,); --replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK --error ER_USER_LIMIT_REACHED # Clean up connection default; disconnect muc3; disconnect muc4; DROP USER mysqltest_2@localhost; set sql_mode= @orig_sql_mode; # Wait till all disconnects are completed --source include/wait_until_count_sessions.inc