mariadb-mysql权限问题

时间:2016-08-25 20:47:41

标签: mysql permissions mariadb

我有一个问题,当我尝试通过我的Web应用程序执行存储过程时,我显示以下错误

SQLSTATE[42000]: Syntax error or access violation: 1142 INSERT command denied to user 'elitecareers_admin'@'%' for table 'user'

为了清楚起见,这是我的存储过程

DELIMITER $$
CREATE PROCEDURE `sp_create_account`( username_param VARCHAR(40), email_param VARCHAR(60), pass_w VARCHAR(30), category_id TINYINT )
BEGIN 
    DECLARE salt VARCHAR(60);
    DECLARE password_var VARCHAR(128);

    SET salt = 'ELiCrs@4$^7EC%?';
    SET salt = CONCAT( username_param, salt );
    SET password_var = SHA2( CONCAT( pass_w, salt ), 0 );

    INSERT INTO elite.user
    ( user_id, username, email, pass, active, date_joined, user_category_id )
    VALUES
    ( DEFAULT, username_param, email_param, password_var, DEFAULT, DEFAULT, category_id );
END $$
DELIMITER ;

以下是运行show命令时存储过程的外观 enter image description here

这也是我的服务器信息 enter image description here

以下是用户'elitecareers_admin' @'%' Web应用程序正在执行的位置 enter image description here

如果用户拥有数据库的所有权限,我不明白为什么mysql / maria服务器会保留这些错误?

1 个答案:

答案 0 :(得分:0)

“SQL SECURITY特性可以是DEFINER或INVOKER来指定安全上下文;也就是说,例程是使用例程DEFINER子句中指定的帐户的权限还是调用它的用户执行。此帐户必须具有权限访问与例程关联的数据库。默认值为DEFINER。调用例程的用户必须具有EXECUTE特权,如果例程在definer安全性中执行,则必须具有DEFINER帐户上下文。“ - https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html

因此,无论谁运行proc,'elitecareers_admin'@'%'的权限都将用于访问表eliteuser等内容。但该用户似乎只拥有数据库elitecareers\_elite的权限。

计划A:如果适当,请使用SQL SECURITY INVOKER 重新创建过程。

计划B:找出数据库eliteelitecareers\_elite之间的差异。

计划C:添加另一个GRANT,让该管理员转到elite

计划D :(可能还有其他解决方案。)