zoukankan      html  css  js  c++  java
  • 项目实战解决运行sql文件错误

    说明:

      新项目启动,通过公司运维同学给的数据库脚本在Navicat中建项目的数据库,运行脚本时报错

      Error Code: 1227. Access denied; you need (at least one of) the SUPER privilege(s) for this operation

    解决:

      发现创建的SQL有指定DEFINER,因为自己运行脚本的时候没有修改DEFINER所以报错,把DEFINER修改后即可。

    -- ----------------------------
    -- Procedure structure for test_find_member_info_proc
    -- ----------------------------
    DROP PROCEDURE IF EXISTS `test_find_member_info_proc`;
    delimiter ;;
    CREATE DEFINER=`xxx`@`%` PROCEDURE `test_find_member_info_proc`()
    begin 
            
            DECLARE mid bigint;
            DECLARE tid bigint;
            DECLARE iid bigint;
                        .............
    end
    ;;
    delimiter ;

    存储过程中的DEFINER说明:  

      (1) DEFINER的意思是“定义者”,也就是指明此存储过程有哪个用户定义的,它跟存储过程的使用权限无关;可以说,存储和过程是没有使用限制的,任何人都可以使用存储过程,那么为什么还要加上DEFINER指定存储过程的定义者呢,因为,存储过程虽然不限制任何人使用,但是它本身的行为必须受到权限限制,也就是存储过程本身内部具备哪些对数据库的访问权限,而这访问权限便是DEFINER用户对数据库的访问权限。

      (2) DEFINER被定义为一个普通的username@hostname用户就不必说了,如果定义为root@%,有什么特别的吗?没有。只不过数据库中要存在root@%用户,否则创建的时候没事,调用的时候就提示root@% is not registered,也就是用户不存在。

      (3) DEFINER也可以省略掉,这样存储过程默认的定义者是root@localhost,而一般数据库在安装的时候都会有一个root@localhost用户,所以,该存储过程也能正常在不同的机器上被使用

    希望本文章对您有帮助,您的转发、点赞是我的创作动力,十分感谢。更多好文推荐,请关注我的微信公众号--JustJavaIt
  • 相关阅读:
    iOS nsstring 截取字符前后字符串
    iOS 计算时间差
    Android的ProgressBar
    Android:OptionMenu
    eclipse the user operation is waiting for building workspace" to complete
    Android存储之SQLiteDatbase
    Android保存之SharedPreferences
    pkg_utility
    Oracle同义词 synonyms
    xzzx
  • 原文地址:https://www.cnblogs.com/liaowenhui/p/11216987.html
Copyright © 2011-2022 走看看