Mysql 创建存储过程时是否需要“definer”?

Mysql 创建存储过程时是否需要“definer”?,mysql,stored-procedures,Mysql,Stored Procedures,我已经将所有MySQL过程写成root@localhost: CREATE DEFINER=`root`@`localhost` PROCEDURE `p_add_user`(...) 问题是,当部署到另一台服务器时,我必须用当前用户替换root,用当前IP替换localhost,这很烦人 有没有办法编写过程,这样想使用我的数据库和过程的人就不必修改每个过程的定义了?如MySQL文档中所述 所以,定义者部分不是强制性的,只是创建过程应该可以工作 CREATE DEFINER=[your_web

我已经将所有MySQL过程写成
root@localhost

CREATE DEFINER=`root`@`localhost` PROCEDURE `p_add_user`(...)
问题是,当部署到另一台服务器时,我必须用当前用户替换
root
,用当前IP替换
localhost
,这很烦人


有没有办法编写过程,这样想使用我的数据库和过程的人就不必修改每个过程的定义了?

如MySQL文档中所述

所以,定义者部分不是强制性的,只是创建过程应该可以工作

CREATE DEFINER=[your_web_user]@% PROCEDURE p_add_user(...)

检查一下。。如果您想在过程中定义用户,这可能会对您有所帮助…

[EDIT:Update ref page]

您可以通过在过程体中添加以下语句(声明后)来指定执行权限:

例如:

CREATE DEFINER=`root`@`localhost` PROCEDURE `p_add_user`()
SQL SECURITY INVOKER
(...)
这样,将应用实际的调用者权限,并省略
定义者
部分(即使在模式导入期间自动添加)。 全文参考:

它说“DEFINER子句确定在触发激活时检查访问权限时要使用的安全上下文。本节后面将给出更多详细信息。”因此,当我确定过程仅由特权用户使用时,我可以完全删除DEFINER的所有内容?是的,我想。我认为,当您定义用户权限时,有一个“执行过程”权限可以被授予/拒绝(对此不确定…),这会将定义者设置为当前用户。根据MySQL文档:“所有存储程序(过程、函数和触发器)和视图都可以有一个DEFINER属性来命名MySQL帐户。如果在存储程序或视图定义中省略DEFINER属性,则默认帐户是创建对象的用户。”嗨,DEFINER属性杀死了我。。。让我知道如何删除这个?它会在我创建新程序时自动创建。。。我正在使用godaddy共享主机。同样的问题在这里,定义者是一个杀手。我如何添加没有定义者的过程?您是否可以解释属性定义者?%意味着-它允许来自任何ip地址的任何用户?请。回答我。我正在使用godaddy共享主机,其中定义器是自动创建的,我们无法删除它。它被称为DEFINER=[databasename]@%,但它不允许我从本地windows应用程序与存储过程通信;但是,如果我使用普通查询(如:select*from tablenm…),我可以进行交流。在这方面,有人能帮我吗?请。这应该是答案。它完美地解决了OP的问题。
SQL SECURITY INVOKER
CREATE DEFINER=`root`@`localhost` PROCEDURE `p_add_user`()
SQL SECURITY INVOKER
(...)