我使用navid
(cpanel
)在我的共享服务器中创建了数据库和用户databases -> mySQL@ Databases -> add new user
,然后为用户navid
选择了所有权限。
当我遇到这个错误时,我正在导入mydatabase.sql
。
我该如何修复错误?商店程序在localhost
中运行良好。
什么是SUPER特权?
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
答案 0 :(得分:35)
从documentation(我的重点):
SUPER权限允许帐户使用CHANGE MASTER TO,KILL 或者mysqladmin kill来杀死属于其他帐户的线程(你 可以随时杀死自己的线程),PURGE BINARY LOGS,配置 使用SET GLOBAL进行更改以修改全局系统变量 mysqladmin debug命令,启用或禁用日志记录,执行 即使启用read_only系统变量,启动和更新也会更新 停止从服务器上的复制,任何帐户的规范 在存储的程序和视图的DEFINER属性中,并启用 你连接(一次)即使连接限制由 达到max_connections系统变量。
由于您已经navid
到数据库,因此您无需在存储过程中设置DEFINER
属性;添加此行会导致错误显示。如果删除此语句,将创建您的过程,并且您将不会收到权限错误。
如果要为其他用户设置存储过程,则只需设置DEFINER
,默认情况下,存储过程将获得相同的安全上下文as the user that is creating it:
所有存储的程序(过程,函数和触发器)和视图 可以有一个名为MySQL帐户的DEFINER属性。 如果 存储的程序或视图定义中省略了DEFINER属性, 默认帐户是创建对象的用户。
答案 1 :(得分:9)
我也遇到了问题并在MySQL Workbench中修复了它。 在我的情况下,这是因为“发送到SQL编辑器>创建语句”在那里有额外的东西,防止在没有修改的情况下使用。
这样的事情:
CREATE ALGORITHM = UNDEFINED DEFINER = schemax
@ localhost
SQL
安全定义视图viewName
AS SELECT ....
将其更改为:
创建视图viewName
AS SELECT ....
现在似乎工作,无需更新权限。 **我是我数据库的唯一用户..
答案 2 :(得分:1)
我有同样的问题 - 在我的本地开发服务器上它很好但是在我的托管服务器上(通过PHPMyAdmin)它给了我上面的错误。
如果您对作为当前用户的定义者感到满意,则删除definer属性似乎是解决问题的最简单方法。
答案 3 :(得分:1)
只需删除 DEFINER 属性及其值,例如:
CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW ...
答案 4 :(得分:0)
不要依赖默认值,如果清空phpMyAdmin中的definer字段或其他未解决的程序,请检查定义者,除非明确需要,否则不应为username@localhost
,但{{1 }}