summaryrefslogtreecommitdiff
path: root/mysql-test/r/user_limits.result
diff options
context:
space:
mode:
authorunknown <dlenev@brandersnatch.localdomain>2004-12-29 20:30:37 +0300
committerunknown <dlenev@brandersnatch.localdomain>2004-12-29 20:30:37 +0300
commit05b709fc77e2f321fa3fa45ee5b2ec2ceae54055 (patch)
tree8513dd4fd070f48ad0f480cfb45253f1e9a8e9b6 /mysql-test/r/user_limits.result
parentd967118ff655ce9e220e92c30b83e79740af7dda (diff)
downloadmariadb-git-05b709fc77e2f321fa3fa45ee5b2ec2ceae54055.tar.gz
WL#1339 "Add per account max_user_connections limit (maximum number
of concurrent connections for the same account)" Added support of account specific max_user_connections limit. Made all user limits to be counted per account instead of the old behavior, which was per user/host accounting. Added option which enables the old behavior. Added testing of these to the test suite. (After review version). client/mysqltest.c: Extended mysqltest to be able to handle connect() statements for which error is expected. - Added replace_dynstr_append() utility function. - added connect_n_handle_errors() function which connects with server without retries and handles errors as if "connect" was usual statement. - do_connect(): added ability to handle connects which are expected to return an error. - run_query_normal(): Moved all expected-error-handling code to separate normal_handle_error()/normal_handle_no_error() functions to be able to reuse them in connect_n_handle_errors(). mysql-test/r/grant.result: Fixed test results since one more column to mysql.user was added. mysql-test/r/system_mysql_db.result: Fixed test results since one more column to mysql.user was added. scripts/mysql_create_system_tables.sh: Added max_user_connections column to mysql.user table for storing new maximal concurrent connections per account limit. scripts/mysql_fix_privilege_tables.sql: Added max_user_connections column to mysql.user table for storing new maximal concurrent connections per account limit. sql/lex.h: Added MAX_USER_CONNECTIONS symbol used for specifying maximum number of concurrent connections per account. sql/mysql_priv.h: Added declaration of opt_old_style_user_limits variable which is defined in sql/mysqld.cc used in sql/sql_parse.cc. sql/mysqld.cc: Added "old-style-user-limits" option which forces user limits to behave in old way i.e. to be counted per user/host pair instead of per account. Added comment describing mqh_used variable. sql/set_var.cc: Added sys_var_max_user_conn class which implements support for the new behavior of max_user_connections variable. Now the global instance of this variable holds default maximum number of concurrent connections per account (as it was before) and the session instance gives read-only access to account-specific version of this limit. sql/set_var.h: Added sys_var_max_user_conn class which implements support for the new behavior of max_user_connections variable. Now the global instance of this variable holds default maximum number of concurrent connections per account (as it was before) and the session instance gives read-only access to account-specific version of this limit. sql/sql_acl.cc: Added support for account-specific MAX_USER_CONNECTIONS limit. Tweaked USER_RESOURCES and their handling for better clarity. sql/sql_parse.cc: Added support for account-specific MAX_USER_CONNECTIONS (maximum number of concurrent connections per account) limit. Changed default behavior of all user limits to be per account instead of per user+host. '--old-style-user-limits' option was added to enable the old behavior. Made maximum number of connections per hour to be independant on the value of global max_user_connections variable. sql/sql_yacc.yy: Added support of new MAX_USER_CONNECTIONS limit to grammar. Renamed USER_RESOURCES::connections member to conn_per_hour and bits member to specified_limits. Also enum is used instead of naked numbers when we are working with specified_limits. sql/structs.h: USER_RESOURCES struct: - Added user_conn member to store the maximum number of concurrent connections for an account. Renamed connections member to conn_per_hour for less ambiguity. - Renamed member 'bits' to 'specified_limits' for the sake of clarity. The member was used as a flag indicating which limits were mentioned in GRANT clause. - Added comments. USER_CONN struct: - Removed unused user_len member. - Added comments.
Diffstat (limited to 'mysql-test/r/user_limits.result')
-rw-r--r--mysql-test/r/user_limits.result89
1 files changed, 89 insertions, 0 deletions
diff --git a/mysql-test/r/user_limits.result b/mysql-test/r/user_limits.result
new file mode 100644
index 00000000000..d15f99337b7
--- /dev/null
+++ b/mysql-test/r/user_limits.result
@@ -0,0 +1,89 @@
+drop table if exists t1;
+create table t1 (i int);
+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;
+grant usage on *.* to mysqltest_1@localhost with max_queries_per_hour 2;
+select * from t1;
+i
+select * from t1;
+i
+select * from t1;
+ERROR 42000: User 'mysqltest_1' has exceeded the 'max_questions' resource (current value: 2)
+select * from t1;
+ERROR 42000: User 'mysqltest_1' has exceeded the 'max_questions' resource (current value: 2)
+drop user mysqltest_1@localhost;
+grant usage on *.* to mysqltest_1@localhost with max_updates_per_hour 2;
+select * from t1;
+i
+select * from t1;
+i
+select * from t1;
+i
+delete from t1;
+delete from t1;
+delete from t1;
+ERROR 42000: User 'mysqltest_1' has exceeded the 'max_updates' resource (current value: 2)
+select * from t1;
+i
+delete from t1;
+ERROR 42000: User 'mysqltest_1' has exceeded the 'max_updates' resource (current value: 2)
+select * from t1;
+i
+drop user mysqltest_1@localhost;
+grant usage on *.* to mysqltest_1@localhost with max_connections_per_hour 2;
+select * from t1;
+i
+select * from t1;
+i
+connect(localhost,mysqltest_1,,test,MYSQL_PORT,MYSQL_SOCK);
+ERROR 42000: User 'mysqltest_1' has exceeded the 'max_connections' resource (current value: 2)
+select * from t1;
+i
+connect(localhost,mysqltest_1,,test,9306,/home/dlenev/src/mysql-5.0-1339/mysql-test/var/tmp/master.sock);
+ERROR 42000: User 'mysqltest_1' has exceeded the 'max_connections' resource (current value: 2)
+drop user mysqltest_1@localhost;
+flush privileges;
+grant usage on *.* to mysqltest_1@localhost with max_user_connections 2;
+select * from t1;
+i
+select * from t1;
+i
+connect(localhost,mysqltest_1,,test,MYSQL_PORT,MYSQL_SOCK);
+ERROR 42000: User 'mysqltest_1' has exceeded the 'max_user_connections' resource (current value: 2)
+select * from t1;
+i
+grant usage on *.* to mysqltest_1@localhost with max_user_connections 3;
+select * from t1;
+i
+connect(localhost,mysqltest_1,,test,MYSQL_PORT,MYSQL_SOCK);
+ERROR 42000: User 'mysqltest_1' has exceeded the 'max_user_connections' resource (current value: 3)
+drop user mysqltest_1@localhost;
+select @@session.max_user_connections, @@global.max_user_connections;
+@@session.max_user_connections @@global.max_user_connections
+0 0
+set session max_user_connections= 2;
+ERROR HY000: Variable 'max_user_connections' is a GLOBAL variable and should be set with SET GLOBAL
+set global max_user_connections= 2;
+select @@session.max_user_connections, @@global.max_user_connections;
+@@session.max_user_connections @@global.max_user_connections
+2 2
+grant usage on *.* to mysqltest_1@localhost;
+select @@session.max_user_connections, @@global.max_user_connections;
+@@session.max_user_connections @@global.max_user_connections
+2 2
+select * from t1;
+i
+connect(localhost,mysqltest_1,,test,MYSQL_PORT,MYSQL_SOCK);
+ERROR 42000: User mysqltest_1 has already more than 'max_user_connections' active connections
+grant usage on *.* to mysqltest_1@localhost with max_user_connections 3;
+select @@session.max_user_connections, @@global.max_user_connections;
+@@session.max_user_connections @@global.max_user_connections
+3 2
+connect(localhost,mysqltest_1,,test,MYSQL_PORT,MYSQL_SOCK);
+ERROR 42000: User 'mysqltest_1' has exceeded the 'max_user_connections' resource (current value: 3)
+set global max_user_connections= 0;
+drop user mysqltest_1@localhost;
+drop table t1;