我的编程空间,编程开发者的网络收藏夹
学习永远不晚

一次mysql 用户不存在的报错

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

一次mysql 用户不存在的报错

    前阵回收生产帐号的访问范围,即之前是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。将其功能实现在代码层面,减少数据库的负载。


    

    

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

一次mysql 用户不存在的报错

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何解决MySQL报错:表不存在

当MySQL报错“表不存在”时,可以按照以下步骤解决:1. 确认表名是否正确:首先检查表名是否拼写正确,并且注意大小写。在MySQL中,表名是区分大小写的。2. 检查数据库:确认当前操作的数据库是否正确。使用`USE`语句切换到正确的数据库
2023-10-10

如何解决MySQL报错:键列在表中不存在

当MySQL报错键列在表中不存在时,通常是因为你尝试使用一个不存在的列作为键列。要解决这个问题,你可以尝试以下几个步骤:1. 确认表结构:首先,确认你的表中是否确实存在你尝试使用的键列。可以通过使用`DESCRIBE`或`SHOW COLU
2023-10-10

Table 'table_name' doesn't exist - 如何解决MySQL报错:表不存在

在使用MySQL数据库的过程中,我们经常会遇到各种各样的错误。其中,最常见的错误之一就是“Table 'table_name' doesn't exist”(表不存在)错误。这个错误通常出现在我们试图查询或操作一个不存在的表时。在本文中,我
2023-10-21

PHP 和 MYSQL 数据库连接和表创建仅一次(如果它尚不存在)?

要仅创建数据库一次,请使用以下语法。CREATE DATABASE IF NOT EXISTS yourDatabaseName;要仅创建表一次,请使用以下语法 -CREATE TABLE IF NOT EXISTS yourTableNa
2023-10-22

在MySQL中,为什么一个客户端不能使用另一个客户端定义的用户定义变量?

在 MySQL 中,一个客户端定义的用户定义变量不能被另一个客户端看到或使用,因为用户定义变量是特定于连接的。这意味着当客户端退出时,给定客户端连接的所有变量都会自动释放
2023-10-22

在MySQL中,为什么一个客户端不能使用另一个客户端定义的用户定义变量

在MySQL中,每个客户端都有自己的会话空间,用于存储会话变量和用户定义变量。每个客户端之间的会话空间是相互隔离的,因此一个客户端无法直接访问另一个客户端定义的变量。当一个客户端定义一个用户定义变量时,它只能在该客户端的会话中使用和访问这个
2023-10-20

Python报错:对象不存在此属性的解决

这篇文章主要介绍了Python报错:对象不存在此属性的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-19

存储在地图中的 Html 模板在第一次调用时崩溃

大家好,我们又见面了啊~本文《存储在地图中的 Html 模板在第一次调用时崩溃》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~
存储在地图中的 Html 模板在第一次调用时崩溃
2024-04-05

Key column 'column_name' doesn't exist in table - 如何解决MySQL报错:键列在表中不存在

正文:在使用MySQL数据库进行开发或者管理时,常常会遇到各种各样的错误。其中一个常见的错误是键列在表中不存在,即Key column 'column_name' doesn't exist in table。这个错误通常在使用索引或者外键
2023-10-21

“租户 GUID X 的租户不存在”,对于自己的电子邮件帐户(我是唯一的成员)

php小编鱼仔在解决电子邮件帐户问题时,可能会遇到错误信息“租户 GUID X 的租户不存在”,特别是当自己是唯一成员时。这个错误信息可能会导致无法登录或访问电子邮件帐户。针对这个问题,我们有一些解决方案可以尝试,以恢复对电子邮件帐户的访问
“租户 GUID X 的租户不存在”,对于自己的电子邮件帐户(我是唯一的成员)
2024-02-13

dedecms提示你的用户名不存在的解决方法

数据库的admin表看看有没有这个用户名。没有的话就是真不存在了。编程客栈有的话可能是你的数据库连接有误。编程客栈看下data文件夹下面的common.inc.编程客栈php里面编程客栈的用户名密码有没有写错jfxIin。
2022-06-12

技术分享 | 一次有趣的 MySQL 客户端命令用法的探索

作者:陈怡前言这篇文章简单介绍一下运维中经常用到的“MySQL客户端”的一些小技巧。这些小技巧非专业 DBA 基本不会用到,专业的 DBA 必备。希望我的分享你们也能用到。MySQL 客户端的内置命令有以下这些,我们会探索其中 6 个:List of all
技术分享 | 一次有趣的 MySQL 客户端命令用法的探索
2019-06-20

mysql修改用户密码报错的解决方法

目录mysql修改密码报错解决办法:关于 mysql 密码策略相关参数;关于 validate_password_policy 的取值:mysql修改密码报错Your password does not satisfy the curre
2023-03-15

如何解决MySQL报错:无法删除数据库,数据库不存在

当MySQL报错"无法删除数据库,数据库不存在"时,可以按照以下步骤来解决问题:1. 首先,确认你输入的数据库名称是否正确。在SQL命令中,数据库名称是大小写敏感的,所以请确保你输入的数据库名称大小写与实际数据库名称一致。2. 使用SHOW
2023-10-10

查找一个 MySQL 表中不存在于另一个表中的记录?

要查找一个 MySQL 表中不存在于另一个表中的记录,我们可以使用对没有记录的表进行子查询。使用以下可以更好地理解这一点给定步骤 -首先使用 create 命令创建一个表。表名称是“PresentHistory”,它有两列。给出如下
2023-10-22

编程热搜

目录