You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB更新数据报1644 Price Change Access Denied错误

问题描述
  • 日常开发流程中,需从服务器导出数据表导入本地数据库,完成本地环境数据更新
  • 数据表导入完成后,执行数据更新操作时抛出如下错误:
SQLSTATE[45000]: <<Unknown error>>: 1644 Price Change Access Denied (SQL: update `products` set `weight` = 1560000, `price` = 7320000, `major_shopping` = a:1:{i:0;a:2:{s:9:"min_order";i:1;s:14:"discount_price";i:820000;}}, `updated_at` = 2022-06-07 18:52:37 where `id` = 217)
  • 已测试多种公开检索到的解决方案均未修复,初步判断故障与权限配置相关,但无法定位具体问题点。
故障根因

该报错和数据库账号的表操作权限无关,核心原因是从服务端导出表结构时,将服务端自定义的表触发器一并导入了本地数据库。
MySQL错误码1644属于自定义抛出的业务错误,Price Change Access Denied是触发器内预设的报错文本:服务端通常会配置UPDATE类型触发器,拦截非授权账号直接修改商品价格这类敏感字段,触发器逻辑内会校验当前操作用户、请求来源是否在白名单内,本地环境使用的数据库账号不在该触发器预设的允许改价白名单中,因此只要执行涉及price字段更新的SQL,就会被触发器拦截抛出错误。

修复方案

选择以下任意一种方案操作即可修复:

  1. 重新导出数据表,导出时排除触发器内容后再导入本地库。使用mysqldump导出时添加--skip-triggers参数即可跳过触发器导出:
    mysqldump -u 你的数据库账号 -p 目标库名 products --skip-triggers > products_local.sql
    
  2. 若不想重新导入数据,可直接删除本地库products表上绑定的价格校验触发器。先查询该表关联的所有触发器:
    SHOW TRIGGERS WHERE `Table` = 'products';
    
    找到触发时机为UPDATE、逻辑中包含价格校验/权限判断的触发器,执行删除语句即可:
    DROP TRIGGER 上一步查询到的目标触发器名称;
    
  3. 若本地调试需要保留触发器逻辑,可直接修改触发器的权限判断规则,将本地使用的数据库账号加入允许操作的白名单即可。

内容的提问来源于stack exchange,提问作者Sina Kalantari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 14:01:27