From bb301912ce367fc10309fa113d9cc9d85a2b32f6 Mon Sep 17 00:00:00 2001 From: zyimm Date: Thu, 10 Oct 2024 15:37:30 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=A6=BB=20MySQL=E7=9A=841449=E9=94=99?= =?UTF-8?q?=E8=AF=AF=EF=BC=8Cdefiner=E4=B8=8D=E5=AD=98=E5=9C=A8=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _posts/数据库/Mysql/mysql_PROCEDURE.md | 56 ++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 _posts/数据库/Mysql/mysql_PROCEDURE.md diff --git a/_posts/数据库/Mysql/mysql_PROCEDURE.md b/_posts/数据库/Mysql/mysql_PROCEDURE.md new file mode 100644 index 0000000..a0669e0 --- /dev/null +++ b/_posts/数据库/Mysql/mysql_PROCEDURE.md @@ -0,0 +1,56 @@ +--- +title: 🦻 MySQL的1449错误,definer不存在处理 +date: 2024-10-10 +tags: + - mysql +--- + +MySQL 错误 1449 通常表示 "The user specified as a definer ('user'@'host') does not exist"。出现这个错误的原因是mysql在尝试执行某个存储过程、函数或视图时,定义者(definer)指定的用户不存在于数据库中。 + +首先先查看一下,目前数据库中存储过程有哪些定义者,sql如下: + +```sh +SELECT + ROUTINE_NAME, + DEFINER +FROM + information_schema.ROUTINES +WHERE + ROUTINE_TYPE = 'PROCEDURE' + AND ROUTINE_SCHEMA = 'your_database_name'; # your_database_name 替换成实际数据库名称 +``` + +看一下DEFINER的值,是否再目前数据库用户当中,根据实际情况进行如下1或2解决: + +## 1. 创建缺失的用户 + +```sh +CREATE USER 'user'@'host' IDENTIFIED BY 'password'; +``` + +替换 'user'、'host' 和 'password' 为实际值。之后别忘了赋予适当的权限给新创建的用户。 + +赋予权限如下: + +```sh +GRANT SELECT, INSERT, UPDATE ON my_database.my_table TO 'user'@'host'; # my_database.my_table 赋予 SELECT, INSERT, UPDATE + +#或赋予所有权限,视情况而定 + +GRANT ALL PRIVILEGES ON my_database.my_table TO 'user'@'host'; + +``` + +更改权限之后,需要刷新权限! + +```sh +FLUSH PRIVILEGES; +``` + +### 2. 修改定义者的身份 + +修改存储过程、函数或视图的定义者为一个存在的用户。 + +```sh +ALTER DEFINER = 'new_user'@'new_host' PROCEDURE your_procedure_name #'new_user'@'new_host' 替换实际用户; +```