室内设计网站哪些号,网站做美工,企业商务网站建设的基本方法,科技信息网站系统建设方案mysql创建view、trigger、function、procedure、event时都会定义一个Definer: SQL SECURITY 有两个选项#xff0c;一个为DEFINER#xff0c;一个为INVOKER#xff1b;SQL SECURITY { DEFINER | INVOKER } #xff1a;指明谁有权限来执行。DEFINER 表示按定义者拥有的权限来…mysql创建view、trigger、function、procedure、event时都会定义一个Definer: SQL SECURITY 有两个选项一个为DEFINER一个为INVOKERSQL SECURITY { DEFINER | INVOKER } 指明谁有权限来执行。DEFINER 表示按定义者拥有的权限来执行INVOKER 表示用调用者的权限来执行。默认情况下系统指定为DEFINER 以存储过程为例 1MySQL存储过程是通过指定SQL SECURITY子句指定执行存储过程的实际用户 2如果SQL SECURITY子句指定为DEFINER存储过程将使用存储过程的DEFINER执行存储过程验证调用存储过程的用户是否具有存储过程的execute权限和DEFINER用户是否具有存储过程引用的相关对象的权限 3如果SQL SECURITY子句指定为INVOKER那么MySQL将使用当前调用存储过程的用户执行此过程并验证用户是否具有存储过程的execute权限和存储过程引用的相关对象的权限 4如果不显示的指定SQL SECURITY子句MySQL默认将以DEFINER执行存储过程。 修改mysql中所有已经定义到的definer 由于前期在测试库上开发的缘故我们经常定义到的definer为root%后来搬移到生产库上又得改回来存在着大量的更新上百个的视图函数等一个个改不免太麻烦并且也可能遗漏。 如下为总结出的方便修改所有definer的方法可以直到查漏补缺的作用。 1.修改function、procedure的definer select definer from mysql.proc; -- 函数、存储过程 update mysql.proc set defineruserlocalhost; -- 如果有限定库或其它可以加上where条件 2.修改event的definer select DEFINER from mysql.EVENT; -- 定时事件 update mysql.EVENT set definer userlocalhost ; 3.修改view的definer 相比function的修改麻烦点 select DEFINER from information_schema.VIEWS; select concat(alter DEFINERuserlocalhost SQL SECURITY DEFINER VIEW ,TABLE_SCHEMA,.,TABLE_NAME, as ,VIEW_DEFINITION,;) from information_schema.VIEWS where DEFINERuserlocalhost; 查询出来的语句再执行一遍就好了。 4.修改trigger的definer 目前还没有具体方便的方法可以借助工具端如HeidiSQL、sqlyog等来一个个修改。注意改前有必要锁表,因为如果改的过程中有其它表改变而触发会造成数据不一致。 Flush tables with readlock Unlock tables转载于:https://www.cnblogs.com/elontian/p/9122663.html