• mysql中如何限制账户资源?
  • Alice 发表于 2014/12/14 11:42:00 | 分类标签: mysql 账户设置 账户资源
  • 限制MySQL服务器资源使用的一个方法是将max_user_connections系统变量设置为非零值。但是,该方法严格限于全局,不允许管理具体账户。并且,它只限制使用单一账户同时连接的数量,而不是客户端连接后的操作。许多MySQL管理员对两种类型的控制均感兴趣,特别是Internet服务提供者。

    在MySQL 5.1中,你可以为具体账户限制下面的服务器资源:

    1. 账户每小时可以发出的查询数

    2. 账户每小时可以发出的更新数

    3.账户每小时可以连接服务器的次数

    客户端可以执行的语句根据查询限制来记数。只有修改数据库或表的语句根据更新限制来记数。

    还可以限制每个账户的同时连接服务器的连接数。

    本文中的账户为user表中的单个记录。根据User和Host列值唯一识别每个账户。

    做为使用该特性的先决条件,mysql数据库的user表必须包含资源相关的列。资源限制保存在max_questions、max_updates、max_connections和max_user_connections列内。如果user表没有这些列,必须对它进行升级。

    要想用GRANT语句设置资源限制,使WITH子句来命名每个要限制的资源和根据每小时记数的限制值。例如,要想只以限制方式创建可以访问customer数据库的新账户,执行该语句:

    1. mysql> GRANT ALL ON customer.* TO 'francis'@'localhost'  
    2.     ->     IDENTIFIED BY 'frank'  
    3.     ->     WITH MAX_QUERIES_PER_HOUR 20  
    4.     ->          MAX_UPDATES_PER_HOUR 10  
    5.     ->          MAX_CONNECTIONS_PER_HOUR 5  
    6.     ->          MAX_USER_CONNECTIONS 2;  


    限制类型不需要全部在WITH子句中命名,但已经命名的可以按任何顺序。每个每小时限制值均应为整数,代表每小时的记数。如果GRANT语句没有WITH子句,则每个限制值设置为 默认值零(即没有限制)。对于MAX_USER_CONNECTIONS,限制为整数,表示账户一次可以同时连接的最大连接数。如果限制设置为 默认值零,则根据MAX_USER_CONNECTIONS系统变量确定该账户可以同时连接的数量。

    要想设置或更改已有账户的限制,在全局级别使用GRANT USAGE语句(在*.*)。下面的语句可以将francis的查询限制更改为100:

    1. mysql> GRANT USAGE ON *.* TO 'francis'@'localhost'  
    2.     ->     WITH MAX_QUERIES_PER_HOUR 100;  


    该语句没有改变账户的已有权限,只修改了指定的限制值。

    要想取消已有限制,将该值设置为零。例如,要想取消francis每小时可以连接的次数的限制,使用该语句:

    1. mysql> GRANT USAGE ON *.* TO 'francis'@'localhost'  
    2.     ->     WITH MAX_CONNECTIONS_PER_HOUR 0;  


    当账户使用资源时如果有非零限制,则对资源使用进行记数。

    服务器运行时,它统计每个账户使用资源的次数。如果账户在最后一个小时的连接次数达到限制,该账户的进一步的连接被拒绝。类似地,如果账户达到查询或更新次数的限制,进一步的查询或更新被拒绝。在这种情况下,会给出相关错误消息。

    根据每个账户进行资源计算,而不是根据每个客户端。例如,如果你的账户的查询限制为50,你不能通过两个客户端同时连接服务器将限制增加到100。两个连接的查询被计算到一起。

    可以为所有账户从全局重设当前的每小时资源使用记数,或单独重设给定的账户:

    1.要想将所有账户当前的记数重设为零,可以执行FLUSH USER_RESOURCES语句。还可以通过重载授权表来重设记数(例如,使用FLUSH PRIVILEGES语句或mysqladmin reload命令)。

    2.将具体账户的限制重新授予任何值,可以将它设置为零。要想实现,按照前面所述使用GRANT USAGE,并将限制值指定为该账户当前的限制值。

    计数器重设不影响MAX_USER_CONNECTIONS限制。

    当服务器启动时所有记数从零开始。

  • 请您注意

    ·自觉遵守:爱国、守法、自律、真实、文明的原则

    ·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规

    ·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品

    ·承担一切因您的行为而直接或间接导致的民事或刑事法律责任

    ·您在编程中国社区新闻评论发表的作品,本网站有权在网站内保留、转载、引用或者删除

    ·参与本评论即表明您已经阅读并接受上述条款

  • 感谢本文作者
  • 作者头像
  • 昵称:Alice
  • 加入时间:2013/6/13 0:00:00
  • TA的签名
  • 这家伙很懒,虾米都没写
  • +进入TA的空间
  • 以下内容也很赞哦
分享按钮