Xor*_*rty 27 mysql stored-procedures
我把所有的MySQL程序写成root@localhost:
CREATE DEFINER=`root`@`localhost` PROCEDURE `p_add_user`(...)
Run Code Online (Sandbox Code Playgroud)
麻烦的是,当部署到另一台服务器时,我必须root用当前用户替换并替换localhost为当前的IP,这很烦人.
有没有办法编写程序,以便想要使用我的数据库和程序的人不必修改每个程序的定义者?
mai*_*450 21
在MySQL文档中所述这里
CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
Run Code Online (Sandbox Code Playgroud)
因此,DEFINER部分不是强制性的,只是CREATE PROCEDURE应该有效.
[编辑:更新参考页面]
您可以通过在过程主体中(声明后)添加以下语句来指定执行权限:
SQL SECURITY INVOKER
Run Code Online (Sandbox Code Playgroud)
例子:
CREATE DEFINER=`root`@`localhost` PROCEDURE `p_add_user`()
SQL SECURITY INVOKER
(...)
Run Code Online (Sandbox Code Playgroud)
这样做时,将应用实际的调用者权限并DEFINER省略该部分(即使它是在架构导入期间自动添加的)。完整参考此处:
https ://dev.mysql.com/doc/refman/5.7/en/stored-objects-security.html
| 归档时间: |
|
| 查看次数: |
55307 次 |
| 最近记录: |