【问题标题】:How to restrict user bandwidth, storage and access per user in mysql如何在mysql中限制每个用户的用户带宽、存储和访问
【发布时间】:2014-07-02 12:12:58
【问题描述】:

我需要限制每个用户对 mysql 数据库的访问。所以要求如下。

  1. 用户可以在 MySQL 实例中拥有一个专用存储,并且他不能超过它。
  2. 在一天中的一段时间内限制用户访问
  3. 限制每个用户每小时的读写更新查询次数
  4. 限制每个用户的带宽。

如何在 MySQL 服务器中实现这一点?

【问题讨论】:

  • 你为什么需要所有这些?

标签: mysql


【解决方案1】:

1.用户可以在 MySQL 实例中拥有一个专用存储,并且他不能超过它

据我所知,没有直接的方法可以控制每个用户对 mysql 实例的存储。你可以像akuzminsky 说的那样做,或者如果你有特殊的表格供用户使用:

ALTER TABLE tablename MAX_ROWS=1000000 AVG_ROW_LENGTH=nnn;

更多信息请看:

  1. http://dev.mysql.com/doc/refman/5.7/en/limits-frm-file.html
  2. http://dev.mysql.com/doc/refman/5.7/en/table-size-limit.html

2。在一天中的一段时间内限制用户访问

我不知道直接的方法。我可以想象一个 cronjob 运行与问题 3 类似的命令,但只有在你真的需要它并且没有其他解决方案时才应该这样做:)

3.限制每个用户每小时的读写更新查询次数

你可以使用GRANT命令的以下一些参数:

GRANT ALL ON databasename.* TO 'username'@'server'
       WITH MAX_QUERIES_PER_HOUR 20
       MAX_UPDATES_PER_HOUR 10
       MAX_CONNECTIONS_PER_HOUR 5
       MAX_USER_CONNECTIONS 2;

(记得在之后运行FLUSH PRIVILEGES;

欲了解更多信息,请查看:

http://dev.mysql.com/doc/refman/5.7/en/user-resources.html

4.限制每个用户的带宽

应该是数据库和应用服务器之间的东西。

【讨论】:

    【解决方案2】:

    这里有一些想法。

    1. MySQL 没有给你设置磁盘使用配额的方法。您可以做的是检查每个数据库使用了多少空间并通过其他方式强制执行配额:

      select sum(data_length+index_length),
      from information_schema.tables
      WHERE TABLE_SCHEMA = 'user_x_db'
      
    2. 不知道

    3. 在 mysql.user 中设置 max_updates
    4. 不知道

    【讨论】:

    • 我们可以通过为 MySQL 编写扩展来实现这一点吗?
    • 为什么不呢?市场上很少有 PAM 插件。它们可以扩展以实现您想要的
    • 嗯,我在看插件生成。但这个用例与 PAM 插件不同。
    猜你喜欢
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多