我已将所有MySQL程序编写为root@localhost
:
CREATE DEFINER=`root`@`localhost` PROCEDURE `p_add_user`(...)
麻烦的是,在部署到另一台服务器时,我必须用当前用户替换root
并用当前IP替换localhost
,这很烦人。
有没有办法编写程序,以便想要使用我的数据库和程序的人不必修改每个程序的定义者?
答案 0 :(得分:18)
如MySQL文档中所述here
CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
因此,DEFINER部分不是强制性的,只需要CREATE PROCEDURE。
答案 1 :(得分:1)
CREATE DEFINER=[your_web_user]@% PROCEDURE p_add_user(...)
检查它..如果你想在你的程序中定义用户,这可能会对你有所帮助......
答案 2 :(得分:1)
您可以通过在过程体中添加以下语句(声明后)来指定执行权限:
SQL SECURITY INVOKER
示例:
CREATE DEFINER=`root`@`localhost` PROCEDURE `p_add_user`()
SQL SECURITY INVOKER
(...)
这样做,将应用实际的调用者权限,并省略DEFINER
部分(即使在模式导入期间自动添加它)。
完整参考:
https://dev.mysql.com/doc/refman/5.7/en/stored-programs-security.html