我在Heroku中部署了一个应用程序,数据库管理器是MySQL JawsDB。
我想使用Navicat为我的用户插入数据。该应用程序仅供咨询。
我可以连接到我的JawsDB数据库但是,当我尝试插入新数据时,我收到错误1142 - INSERT command denied to user 'myJawsDBUser'@'myIPAddress' for table 'myTable'
。
我检查了文档并说:
如果您使用的是JawsDB的共享计划之一,则可能违反了通过您的计划分配的数据库大小。当数据库大于计划允许的数据库时,将撤消对数据库用户的INSERT权限,直到数据库恢复到合规状态。
在检查了我的数据库大小之后,我发现我的计划允许的最小数量不足。我认为这是一个特权问题,如果我无法访问用户,如何更改此权限表
答案 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权限,直到数据库大小恢复为符合计划。这可以通过删除旧数据或升级他们的计划来完成。