MySQL的安全/访问控制和帐户管理/设置账户资源的限制

4.21设置账户资源的限制

的手段限制客户使用MySQL服务器资源是集全球max_user_connections系统变量一个非零值。这个限制的并发连接数量可以由任何账户,但没有地方限制一旦连接客户端可以做什么。此外,设置max_user_connections不允许个人账户的管理。这两种类型的控制MySQL感兴趣的管理员。

为了解决这些担忧,MySQL许可限制个人账户使用这些服务器上的资源:

  • 查询一个帐户可以发行的数量每小时

  • 每小时更新一个帐户的数量问题

  • 一个帐户的次数每小时可以连接到服务器

  • 并发连接到服务器的数量由一个帐户

任何声明,客户端可以对查询问题数量限制。只有语句修改数据库或表不利于更新限制。

一个账户在这种情况下对应于中的一行mysql.user系统表。也就是说,连接与评估用户主机中的值用户适用于连接的表行。例如,一个帐户' usera ' @ ' % .example.com '对应于中的一行用户表,用户主机的值usera% .example.com,允许usera从任何主机的连接example.com域。在这种情况下,服务器资源限制在这一行共同适用于所有连接usera从任何主机的example.com域,因为所有这些连接使用相同的账户。

在MySQL 5.0之前,一个账户评估与实际用户连接的主机。这老的会计方法可能会选择通过启动服务器——old-style-user-limits选择。在这种情况下,如果usera连接的同时host1.example.comhost2.example.com,服务器账户资源限制分别适用于每个连接。如果usera连接从host1.example.com连接在一起的,服务器应用限制与现有连接的主机。

建立资源限制的账户创建帐户时,使用创建用户声明。修改现有的帐户的限制,使用改变用户。提供一个条款,名字每个资源是有限的。默认值为每个极限为零(没有限制)。例如,要创建一个新的账户,可以访问客户数据库,但是只有在一个有限的方式,问题这些语句:

mysql >创建用户“弗朗西斯”@“localhost”被“弗兰克”- > MAX_QUERIES_PER_HOUR 20 - > MAX_UPDATES_PER_HOUR 10 - > 5 - > MAX_USER_CONNECTIONS MAX_CONNECTIONS_PER_HOUR 2;

限制类型不需要命名的条款,但这些命名可以出现在任何顺序。每个每小时限制应该是整数的值代表一个计数每小时。为MAX_USER_CONNECTIONS,极限是一个整数代表账户的最大并发连接数。如果这个限制设置为零,全球max_user_connections系统变量值确定的并发连接数。如果max_user_connections也为零,没有限制的账户。

修改限制现有的帐户,使用一个改变用户声明。以下语句更改查询限制弗朗西斯100年:

mysql >改变用户“弗朗西斯”@“localhost”MAX_QUERIES_PER_HOUR 100;

声明只修改指定的极限值和树叶帐户否则不变。

取消限制,将其值设置为0。例如,消除限制每小时多少次弗朗西斯使用这个语句可以连接:

mysql >改变用户“弗朗西斯”@“localhost”MAX_CONNECTIONS_PER_HOUR 0;

如前所述,一个帐户的同时连接限制的决定MAX_USER_CONNECTIONS限制和max_user_connections系统变量。假设全球max_user_connections值是10和三个帐户指定个别资源限制如下:

改变用户“user1”@“localhost”MAX_USER_CONNECTIONS 0;改变用户的user2 @ ' localhost ' MAX_USER_CONNECTIONS 5;改变用户“user3”@“localhost”MAX_USER_CONNECTIONS 20;

user1有连接限制10(全球max_user_connections因为它有一个值)MAX_USER_CONNECTIONS零的极限。user2user3分别连接5和20的限制,因为他们有非零吗MAX_USER_CONNECTIONS限制。

服务器存储资源限制的一个帐户用户表行对应账户。的max_questions,max_updates,max_connections列存储每小时限制,max_user_connections列存储MAX_USER_CONNECTIONS极限。(见4.3节,“格兰特表”。)

资源使用计算发生在任何帐户有非零限制放置在其使用的任何资源。

作为服务器运行时,它的次数计数每个帐户使用资源。如果一个帐户达到限制连接数最后一个小时内,服务器拒绝进一步连接帐户,直到那一刻。类似地,如果帐户达到限制数量的查询或更新,服务器拒绝进一步查询或更新,直到一小时。在所有这些情况下,服务器问题相应的错误消息。

每个账户发生资源计数,不是每个客户端。例如,如果你的账户有一个查询限制为50,你不能增加你的限制到100通过两个并发的客户端连接到服务器。查询两个连接在一起。

当前每小时全球资源使用计数可以重置所有账户,或单独为给定帐户:

  • 重置所有账户的当前计数为零,一个问题冲洗USER_RESOURCES声明。数也可以被重载重置格兰特(例如,使用一个表冲洗的特权语句或一个mysqladmin重载命令)。

  • 个人帐户的数量可以通过设置重置为零的任何限制。指定一个极限值等于当前值分配给该帐户。

每小时计数器重置不影响MAX_USER_CONNECTIONS极限。

服务器启动时各方面从0开始。数量不会通过服务器重启。

MAX_USER_CONNECTIONS限制,优势的情况下可能发生如果帐户目前开放允许的最大连接数:由连接断开后很快会导致一个错误(ER_TOO_MANY_USER_CONNECTIONSER_USER_LIMIT_REACHED)如果服务器还没有完全处理断开连接的时候发生。当服务器断开处理完,另一个连接是再次允许的。