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用户具有最高权限可以操作。

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

  • 相关阅读:
    QT 读写sqllite数据库
    SQLLite 简介
    arcengine 开发经典帖 【强烈推荐仔细研读】
    IHookHelper的用法
    ArcSDE中Compress与Compact的区别
    以Network Dataset(网络数据集)方式实现的最短路径分析
    ArcGIS网络概述
    ClassLoader.getResourceAsStream(name);获取配置文件的方法
    Xml中SelectSingleNode方法,xpath查找某节点用法
    Spring整合JUnit4测试使用注解引入多个配置文件
  • 原文地址:https://www.cnblogs.com/zjdxr-up/p/8428044.html
Copyright © 2011-2022 走看看