2016-08-25 19 views
0

は私が、私はここで、次のエラーmariadb-mysqlのアクセス許可の問題

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 = '[email protected]$^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

は、その下で、Webアプリケーションは、ユーザーがデータベース上のすべての権限を持っている場合、私は、その後、理解していない何 enter image description here

を実行しているユーザーelitecareers_admin '@「%」の権限ありますなぜそれらのエラーを維持するmysql/mariaサーバーですか?

+0

はたぶん、あなただけの '必要FLUSH PRIVILEGES;' – Hackerman

+0

@Hackermanは、通常のテーブルと呼ばれるユーザーとMySQLのユーザーテーブルを混在させないでください! – Shadow

+0

@影私は理解していない...もう少し詳しく説明できますか? – Hackerman

答えて

0

"SQLセキュリティ属性は、セキュリティコンテキストを指定するためにDEFINERまたはINVOKERにすることができます(ルーチンDEFINER句で指定されたアカウントの特権またはそれを呼び出すユーザーの特権を使用して実行するかどうか)。ルーチンが関連付けられているデータベースにアクセスするためのアクセス許可デフォルト値はDEFINERルーチンを呼び出すユーザーには、EXECUTE権限が必要です。ルーチンが定義済みのセキュリティコンテキストでDEFINERアカウントを実行する必要があります。 - https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html

したがって、誰がプロクシを実行するかにかかわらず、'elitecareers_admin'@'%'のアクセス許可は、テーブルにアクセスするなどの目的で使用されます。 user。しかし、そのユーザーはデータベースelitecareers\_eliteに対してのみ権限を持つようです。

プランA:SQL SECURITY INVOKERを使用してprocを再作成します(の場合)。

プランB:データベースeliteelitecareers\_eliteの違いを解説します。

プランC:別のGRANTを追加して、その管理者にeliteが届くようにします。

プランD:(おそらく他のソリューションがあります。)

関連する問題