Mysql 此操作的超级权限

Mysql 此操作的超级权限,mysql,Mysql,我使用cpanel(databases->mySQL@databases->addnewuser)在共享服务器中创建我的数据库和用户navid),然后为用户navid选择所有权限。 当我遇到这个错误时,我正在导入mydatabase.sql 如何修复错误?存储过程在localhost中运行良好 什么是超级特权 Error SQL query: DELIMITER $$-- -- Procedures -- CREATE DEFINER = `navid`@`%` PROCEDURE `d_a

我使用
cpanel
databases->mySQL@databases->addnewuser
)在共享服务器中创建我的数据库和用户
navid
),然后为用户
navid
选择所有权限。 当我遇到这个错误时,我正在导入
mydatabase.sql


如何修复错误?存储过程在
localhost
中运行良好


什么是超级特权

Error
SQL query:
DELIMITER $$--
-- Procedures
--
CREATE DEFINER = `navid`@`%` PROCEDURE `d_answer` ( OUT `sp_out` INT( 11 ) , IN `sp_id` INT( 11 ) ) NO SQL BEGIN DELETE FROM `tblname` WHERE `a_id` = sp_id;
SET sp_out = ROW_COUNT( ) ;
END$$

MySQL said: Documentation
#1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation 
从(我的重点):

超级权限使帐户可以使用“更改主机”来终止 或者mysqladmin kill来终止属于其他帐户(您 可以随时杀死自己的线程),清除二进制日志,配置 更改使用“设置全局”来修改全局系统变量 mysqladmin调试命令,启用或禁用日志记录,执行 即使启用了只读系统变量,也会更新,启动和 停止从服务器上的复制,指定任何帐户 在存储程序和视图的定义器属性中,并启用 即使连接限制由 已达到系统变量的最大连接数

由于您已经对数据库进行了
navid
,因此不需要在存储过程中设置
DEFINER
属性;添加此行会导致显示错误。如果删除此语句,将创建您的过程,您将不会获得权限错误

如果要为其他用户设置存储过程,则只需设置
DEFINER
,默认情况下,存储过程会获得相同的安全上下文:

所有存储程序(过程、函数和触发器)和视图 可以有一个DEFINER属性来命名MySQL帐户如果 定义器属性从存储程序或视图定义中省略, 默认帐户是创建对象的用户。


我也遇到了这个问题,因此在MySQL工作台中修复了它。 在我的例子中,这是因为“发送到SQL编辑器>创建语句”中有额外的内容,不经修改就无法使用

大概是这样的:

创建算法=未定义的定义程序=
schemax
@
localhost
SQL 安全定义器视图
viewName
作为选择

将其更改为:

创建视图
viewName
作为选择

现在似乎可以工作了,不需要更新权限。
**我是我的数据库的唯一用户。

我也有同样的问题-在我的本地开发服务器上,这很好,但在我的托管服务器(通过PHPMyAdmin)上,它给了我上述错误


如果您对定义者是当前用户感到满意,那么删除定义者属性似乎是解决问题的最简单方法。

不要依赖默认值,如果在phpMyAdmin或其他程序中清空定义者字段无法解决问题,请检查定义者,不应
username@localhost
除非明确需要,但是,
username@%

只需删除定义者属性及其值,例如:

CREATE ALGORITHM=UNDEFINED  SQL SECURITY DEFINER VIEW ...

@Ben-你是什么意思?我不知道如何授予共享服务器中此操作的超级权限我在问为什么有人胆怯地否决了你的问题(即,在没有提供任何原因反馈的情况下给出了-1)。我认为这是一个值得问的问题。@Ben-谢谢你,Ben,你是个好人:)。真的吗?在我的存储过程中不需要使用definer?不,只有在代表其他用户设置存储过程时才需要使用definer;要做到这一点,您需要
SUPER
特权。请检查定义者,不应为
username@localhost
除非明确需要,但
username@%
非常感谢。请检查定义者,不应为
username@localhost
除非明确需要,但
用户名@%
请检查定义人,不应为
username@localhost
除非明确需要,但
用户名@%