• unknown's avatar
    WL#1339 "Add per account max_user_connections limit (maximum number · db11338e
    unknown authored
    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.
    db11338e
sql_acl.cc 136 KB