zoukankan      html  css  js  c++  java
  • Mysql创建函数出错

    目前在项目中,执行创建mysql的函数出错,
    mysql 创建函数出错信息如下:

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

    首先检查创建函数的功能是否开启,检查是否开启创建功能的SQL如下:

    -- 查看是否开启创建函数的功能
    show variables like '%func%';
    -- 开启创建函数的功能
    set global log_bin_trust_function_creators = 1;
    

    执行完SQL之后发现已经开启了,随检查自己的SQL是否写错(因为SQL是别人给的,在别人环境没问题,在自己的环境就有可能)。
    突然发现了确实是SQL出现问题,由于他创建的SQL有指定用户,所以导致出现问题,以下是他的SQL:

    DROP FUNCTION IF EXISTS `nextval`;
    DELIMITER ;;
    CREATE DEFINER=`devop`@`%` FUNCTION `nextval`(`seq_name` VARCHAR(50)) RETURNS varchar(20) CHARSET utf8
    BEGIN 
       DECLARE seq_max BIGINT(20);
       UPDATE sequenceconftable SET `max` = `max` + NEXT WHERE NAME = seq_name; 
       SELECT `max` INTO seq_max FROM sequenceconftable WHERE NAME = seq_name ;
       RETURN seq_max; 
    END
    ;;
    DELIMITER ;
    

    由于CREATE_FUNCTION规范,可以发现就是DEFINER这个参数是可以指定数据库用户的,但是自己的库却不是这个用户,所以导致问题。

    目前问题已经解决。

    -EOF-

  • 相关阅读:
    Extjs 4.0 Grid 数据绑定 json 分页 不分页
    [转]AS语言基础
    tig支持中文搜索
    LPC及MudOS简介(一)
    欢送2012
    存储器性能测试
    为什么go语言适合开发网游服务器端
    从一段代码里看FreeBSD与Linux内存分配的不同
    新的开始
    多语言协作与二进制交互
  • 原文地址:https://www.cnblogs.com/yinxiangnan/p/4729407.html
Copyright © 2011-2022 走看看