ホームページ >データベース >mysql チュートリアル >SQL 関数を phpMyAdmin にインポートすると、「アクセスが拒否されました。この操作には SUPER 権限が必要です」というエラーが表示されるのはなぜですか?
エラー: アクセスが拒否されました。この操作には SUPER 権限が必要です
SQL 関数を phpMyAdmin にインポートしようとすると、「#1227 - アクセスが拒否されました。この操作には SUPER 権限が必要です。」というエラー メッセージが表示される場合があります。このエラーはイライラするかもしれませんが、解決策は比較的簡単です。
SUPER 権限について
MySQL では、SUPER 権限はユーザーにストアド ルーチンの作成や変更など、高度な操作を実行する機能。デフォルトでは、標準ユーザーは SUPER 権限を持っていません。
DEFINER ステートメントの削除
あなたの場合、問題は、 SQLクエリ。 DEFINER ステートメントは、作成された関数を所有するユーザーを指定します。指定されたユーザーに SUPER 権限がない場合、クエリは失敗します。
この問題を解決するには、phpMyAdmin にインポートする前に SQL クエリから DEFINER ステートメントを削除します。これにより、SUPER 権限を必要とせずに関数を作成できるようになります。
区切り文字の設定
さらに、SQL テキストの下に区切り文字フィールドを設定することが不可欠です。 phpMyAdminのボックス。このフィールドは、SQL ステートメントを区切るために使用される文字を指定します。デフォルトでは、セミコロン (;) が区切り文字として使用されますが、クエリの関数定義内にセミコロンが含まれている場合は、別の区切り文字を選択する必要があります。
DEFINER ステートメントを使用しないクエリの例
DEFINER ステートメントを使用しない SQL クエリの例を次に示します。
/*!50003 DROP FUNCTION IF EXISTS `f_calc_gst` */;; /*!50003 SET SESSION SQL_MODE=""*/;; /*!50003 CREATE*/ /*!50003 FUNCTION `f_calc_gst`(p_ht decimal(15,3), p_province varchar(2)) RETURNS varchar(255) CHARSET utf8 begin declare res varchar(255); declare v_gst decimal(15,3); declare v_gst_formula varchar(255); select GST, GST_formula into v_gst, v_gst_formula from taxes_periods where NOW() between dt_debut and dt_fin and id_province = p_province; set v_gst_formula = replace(v_gst_formula, 'HT$', p_ht); set v_gst_formula = replace(v_gst_formula, 'GST%', v_gst); set res = concat('select round(', v_gst_formula, ',2) "gst"'); return res; end */;;
DEFINER ステートメントを削除して正しい区切り文字を設定すると、SQL クエリをインポートできるようになります。アクセス拒否エラーが発生することなく、phpMyAdmin に正常にアクセスできました。
以上がSQL 関数を phpMyAdmin にインポートすると、「アクセスが拒否されました。この操作には SUPER 権限が必要です」というエラーが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。