25

我使用( )navid在我的共享服务器中创建我的数据库和用户,然后为用户选择 ALL PRIVILEGES 。当我遇到这个错误时,我正在导入。cpaneldatabases -> mySQL@ Databases -> add new usernavidmydatabase.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 
4

5 回答 5

37

文档(我的重点):

SUPER 权限使帐户能够使用 CHANGE MASTER TO、KILL 或 mysqladmin kill 来杀死属于其他帐户的线程(您始终可以杀死自己的线程)、PURGE BINARY LOGS、使用 SET GLOBAL 修改全局系统变量的配置更改、mysqladmin debug 命令,启用或禁用日志记录,即使启用了 read_only 系统变量,也执行更新,启动和停止从服务器上的复制,在存储程序和视图的 DEFINER 属性中指定任何帐户,并使您能够连接(一次)甚至如果达到由 max_connections 系统变量控制的连接限制。

由于您已经navid进入数据库,因此无需DEFINER在存储过程中设置属性;添加此行会导致出现错误。如果您删除此语句,您的过程将被创建并且您不会收到权限错误。

您只需要设置DEFINER是否为其他用户设置存储过程,默认情况下,存储过程会获得与创建它的用户相同的安全上下文:

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

于 2013-08-28T04:40:21.870 回答
9

我也遇到了问题,因此在 MySQL Workbench 中修复了它。就我而言,这是因为“发送到 SQL 编辑器 > 创建语句”中有额外的内容,无法在未经修改的情况下使用。

像这样的东西:

CREATE ALGORITHM=UNDEFINED DEFINER= schemax@ localhostSQL SECURITY DEFINER VIEW viewNameAS SELECT ....

将其更改为:

将视图创建为viewNameSELECT ....

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

于 2014-03-07T17:30:32.833 回答
1

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

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

于 2015-08-21T23:29:09.317 回答
1

只需删除DEFINER属性及其值,例如:

CREATE ALGORITHM=UNDEFINED  SQL SECURITY DEFINER VIEW ...
于 2017-06-18T07:08:20.353 回答
0

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

于 2016-11-18T09:34:55.907 回答