zoukankan      html  css  js  c++  java
  • [Err] 1449

    转载:

    最近在做一个项目,由于服务器切换,所以需要将原有服务器的mysql数据表以及存储过程导入到另一个服务器的mysql数据库中。导入完成之后以为一切是那么的简单,却没有想到总还是出现了一些莫名其妙的问题。

    我在用程序调用存储过程时,总是提示错误:

    1 The user specified as a definer ('test'@'%') does not exist 1449

    查看了自己mysql的用户表后,发现确实没有test这个用户,但是我程序用的是root登录的,所以感觉有些莫名其妙。

    后来通过查资料发现,是由于自己存储过程设置的安全性为definer,而当时的那个数据库存在test这个用户且用的test用户创建的存储过程。

    所以解决方法主要有以下两种:

    保持definer安全性

    1)在navicat上进行修改

    将定义者从test改为在该服务器存在的用户(一般每个服务器都有root@localhost)

    2)通过sql语句修改

    1 mysql>update mysql.proc set DEFINER='root@localhost' WHERE NAME='' AND db='mydb';

    其中,mysql.proc是固定的,definer即要改为的用户名,name为存储过程名,db为数据库名

    将安全性修改为invoker

    1)在navicat上进行修改

    2)通过sql语句进行修改

    1 ALTER PROCEDURE proc_name SQL SECURITY INVOKER 
    2 ALTER PROCEDURE proc_name SQL SECURITY DEFINE

    补充:对于Linux,mysql等工具,操作都需要用户权限,之所以在大多数操作时,没有出现问题是因为默认是root用户,root用户具有最高权限可以操作。

    但当操作某些专有的东西功能时,需要登录对应的用户信息才可以操作。

  • 相关阅读:
    虚树入门
    378. 骑士放置(最大独立集)
    377. 泥泞的区域(最大点集)
    352. 闇の連鎖
    P2680 运输计划
    Linux下的段错误(Segmentation fault)
    Acwing 98-分形之城
    快速幂 和 快速乘
    P1308-道路修建 (noi 2011)
    洛谷 P1070 道路游戏(noip 2009 普及组 第四题)
  • 原文地址:https://www.cnblogs.com/zjdxr-up/p/8428044.html
Copyright © 2011-2022 走看看