允许JawsDB中的用户创建INSERT语句

Gol*_*arq 4 mysql database heroku

我在Heroku中部署了一个应用程序,数据库管理器是MySQL JawsDB.我想使用Navicat为我的用户插入数据.该应用程序仅供咨询.我可以连接到我的JawsDB DB但是,当我尝试插入新数据时,我收到错误1142 - INSERT command denied to user 'myJawsDBUser'@'myIPAddress' for table 'myTable'.我检查了文档并说:

如果您使用的是JawsDB的共享计划之一,则可能违反了通过您的计划分配的数据库大小.当数据库大于计划允许的数据库时,将对数据库用户撤消INSERT权限,直到数据库恢复到合规状态.

在检查了我的数据库大小之后,我发现我的规模允许的最小数量不足.我认为这是一个特权问题,如果我没有访问Users表,我怎么能改变这个

小智 7

回答之前的披露:我和JawsDB :)

Jaws根据information_schema通过将该数据库中每个表的data_length和index_length值相加来计算已用空间.

像下面这样的查询用于执行此操作.

select
    s.schema_name
    ,sp.grantee user
    ,cast(round(sum(coalesce(t.data_length + t.index_length, 0)) / 1024 / 1024, 3) as char) db_size_mb
    ,sp.has_insert
from
    information_schema.schemata s
    inner join
    information_schema.tables t on s.schema_name = t.table_schema
    inner join (
        select
            spi.grantee
            ,spi.table_schema
            ,max(
                case
                    when spi.privilege_type = 'INSERT' then 1
                    else 0
                end
            ) has_insert
        from
            information_schema.schema_privileges spi
        group by
            spi.grantee
            ,spi.table_schema
    ) sp on s.schema_name = sp.table_schema
group by
    s.schema_name;
Run Code Online (Sandbox Code Playgroud)

如果数据库表的大小超过授予用户计划的大小,则会暂时撤消INSERT权限,直到数据库大小恢复为符合计划.这可以通过删除旧数据或升级其计划来完成.

  • 就个人而言,我真的希望收到一个指示,这是一个db的大小限制问题,而不是简单地收到一般的MySQL错误.或者至少Heroku或/和JawsDB上的文档应该以非常明显的方式强调这个大小限制. (3认同)
  • 在我花了半天时间研究为什么我无法在 Heroku 上访问我的 JawsDB 之后,我终于找到了这个答案。问题是我已经超出了大小限制,但 Heroku 和 JawsDB 上没有迹象表明这是问题所在。Heroku 上的日志没有显示任何与其相关的内容,而是一个 MySQL 错误。Heroku JawsDB 上有一个与它相关的常见问题解答,但出于某种原因,它位于 Node.js 部分下。 (2认同)
  • 很好的答案,但我同意在没有通知用户的情况下关闭插入访问有点令人沮丧。 (2认同)
  • 请拜托 - 在 JawsDB 信息页面上突出显示这一点 - 我花了大约 3 个小时试图猜测为什么我的应用程序没有 INSERT 权限。 (2认同)