【IT168 专稿】出于某些原因,可能需要对某些帐户的资源,进行一些特定的限制。如出于安全角度的考虑,要对帐户每小时能够发出的查询数、帐户每个小时可以连接服务器的次数等等进行限制。这不但可以提高服务器的安全系数,而且还可以提高应用系统的性能。
一、针对特定的服务器资源施加限制
在MySQL数据库中,数据库管理员可以根据需要对某个帐户实施资源限制策略。当然,无法做到对全部资源进行限制,实际工作中也没有这个必要。通常情况下,只需要对如下几个资源进行限制即可。一是账户每个小时可以连接服务器的次数,二是账户每个小时可以翻出的更新数,三是每个小时可以发出的查询数,四是每个帐户可以同时连接服务器的连接数。通常情况下,这已经可以满足大部分用户的需求。
这里需要注意,以上的限制都是针对特定的帐户而言,而不是客户端。如每个帐户可以同时连接服务器的连接数这个限制,是针对账户。如现在一个账户可能在同一时间从多个客户端连接到数据库服务器。此时客户端的数量就要大于这个连接数了。为此,用户需要牢记,笔者这里谈到的资源限制,针对的是账户,而不是客户端。
如果用户需要查询某个账户是否设置了相关的资源限制,则可以通过如上图所示的语句进行查询。如果查询的值为0,则表示没有添加任何的限制。如果有非0的数字,则表示添加了相关的限制策略。如上图所示的结果,表示这个账户没有添加资源使用限制。
二、账户资源限制的使用注意事项
在使用这个措施来限制账户资源使用时,需要注意,这个策略严格限于全局,而不允许管理具体的账户。并且,这个策略只限制使用单一账户同时连接的数量,而不是客户端连接后的操作。这种限制措施,在针对互联网的应用程序非常的有效。
另外在设置这个资源使用限制措施时,还需要注意与用户账户的权限挂钩。如现在某个用户只有数据查询的权限,而在资源使用限制时,却给其做了“账户每小时可以发出的更新数”的限制,这不是脱了裤子放屁吗?这就在提醒数据库管理员,在设置资源限制措施时要注意用户账户的权限问题。
多个客户端的同一账户操作,其使用情况会被合并。如现在有一个用户,其被限制为“账户每小时连接服务器的次数”为5次。如果其在一个客户端上连接了3次,然后再在另外一个客户端上使用同一个账户连接3次,这会被允许呢?答案是否定的。服务器在运行过程中,会统计每个账户使用资源的次数。如果账户在最后一个小时的连接次数达到限制,那么这个账户的进一步连接就会被限制。类似的,如果账户达到查询或者更新次数的限制,进一步查询或者更新就会被拒绝。服务器会给出相关的错误提示。不过需要注意的是,这个资源的统计是根据每个账户来进行的,而不是根据每个客户端来展开。如笔者上面列举的这个案例。如果用户允许每小时连接的服务器次数为5次,那么这个用户就不能够更换客户端让这个连接次数增加为10次。这就是MySQL数据库一种防止舞弊的措施。如果通过客户端来统计资源的使用情况,就会出现上面这种情形的舞弊。在使用Grant语句来设置资源限制时,可以使用With子句来命名每个要限制的资源和根据每小时计数的限制值。