一次mysql 用户不存在的报错
admin
2023-05-26 15:01:10
0

    前阵回收生产帐号的访问范围,即之前是xxx@"%"的帐号命名方式,修改成若干个以前端应用部署的机器IP为准,修改成xxx@"IP address"。尽量减少不可信客户端连接数据库的情况发生,加强数据安全。

    但是回收xxx@"%"帐号后发现,生产一子系统一直报错,xxx@"%"帐号不存在的异常。一开始通过检查生产代码的jdbc数据库连接串的配置,发现地址配置成服务器的主机名。怀疑是由于域名被错误解析成外网的IP地址导致,将其修改为内网的IP后重新发版本后仍然存在相同报错。

    后来经过排查后最终发现,由于该子系统还采用触发器,只不过之前写触发器的时候没有定义definer,导致该触发器的definer默认为当前编写该触发器的用户,即:xxx@"%"。

    原来,mysql在删除用户的时候,只会影响到mysql系统库的user表、db表和tables_priv表,而该用户创建的触发器是不会被连带删除掉的,因为触发器的信息都保存在information.schema库的triggers表里面。所以,其他普通用户(没有管理员权限)想要调用其他用户的触发器的时候,就会报错。

    问题定位出来了,就容易解决了:

    1、删掉原先的xxx@"%"的触发器,重新定义definer为xxx@"IP address"的触发器

    2、普通帐号能调用触发器,需要配置triggers的权限,要不会报trigger权限报错。

    总结一下:

    数据库之所以为数据库,就是其存储数据和检索数据的能力强大,虽然数据库也有触发器、自定义函数和存储过程这类functions,但是functions的执行是牺牲了数据库部分性能来实现的。而且也会导致前端应用同后端服务紧耦合,前端有变更,后续服务也要跟着变。所以,除非是一些特殊的场景如BI、数据分析等,一般生产环境都禁用trigger、functions和 stored procedure。将其功能实现在代码层面,减少数据库的负载。


    

    

相关内容

热门资讯

特朗普为何罕见出手救日元?友谊... 今年以来,日元汇率持续走弱。近日,日元对美元汇率一度跌至近40年来低点。美日这次罕见的联手并非传统的...
“制茶大师”“烹饪大师”称号接... 澎湃新闻记者 陈良贤 王亚赛又有一个行业开始清理“大师”称号。近期,中国茶叶流通协会发公告称,决定撤...
湖北一地桥梁栏杆被大风吹倒摔碎... 8月4日,有网友曝光了湖北嘉鱼县一座桥梁栏杆全部倒塌摔碎的事件,说在破碎栏杆中未看到任何钢筋,质疑桥...
游客参观兵马俑时停电,官方回应... 摸黑面对兵马俑,是一种什么体验?8月5日,多位参观秦始皇兵马俑的游客发文称,4日下午游览时突遇场馆内...
三星发布zHBM和zNAND-... 【CNMO科技消息】近日,三星参加美国加州举办的“未来存储与内存会议”(FMS 2026)。大会上公...
中国成功发射卫星互联网低轨23... 北京8月4日电 (记者 马帅莎)据中国航天科技集团消息,北京时间8月4日16时52分,中国在海南商业...
台湾启动“汉光演习”,学者:设... 据凤凰卫视报道,台湾军方今天启动一年一度的“汉光演习”,台湾问题专家认为,台军的演习假想完全不符合实...
鸿蒙智行尊界V800官宣搭载面... IT之家 8 月 5 日消息,在今天的尊界时代旗舰 MPV 及华为全场景新品发布会上,华为常务董事、...
鸿蒙生态里程碑!微信鸿蒙版安装... 【CNMO科技消息】8月5日,CNMO科技了解到,微信鸿蒙版迎来重要进展,华为应用市场显示,微信鸿蒙...
奔驰强停商铺门前,店主劝阻反遭... 奔驰强停商铺门前,店主劝阻反遭车上两男子殴打致骨折,打人者事后开车逃跑,监控记录下清晰车牌,长沙警方...