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

时间:2017-02-01 16:57:20

标签: mysql database heroku

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

  

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

在检查了我的数据库大小之后,我发现我的计划允许的最小数量不足。我认为这是一个特权问题,如果我无法访问用户,如何更改此权限表

1 个答案:

答案 0 :(得分: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;

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