MySQL エラー 1449: 定義者として指定されたユーザーが存在しません 質問する

MySQL エラー 1449: 定義者として指定されたユーザーが存在しません 質問する

次のクエリを実行するとエラーが発生します。

SELECT
  `a`.`sl_id`                     AS `sl_id`,
  `a`.`quote_id`                  AS `quote_id`,
  `a`.`sl_date`                   AS `sl_date`,
  `a`.`sl_type`                   AS `sl_type`,
  `a`.`sl_status`                 AS `sl_status`,
  `b`.`client_id`                 AS `client_id`,
  `b`.`business`                  AS `business`,
  `b`.`affaire_type`              AS `affaire_type`,
  `b`.`quotation_date`            AS `quotation_date`,
  `b`.`total_sale_price_with_tax` AS `total_sale_price_with_tax`,
  `b`.`STATUS`                    AS `status`,
  `b`.`customer_name`             AS `customer_name`
FROM `tbl_supplier_list` `a`
  LEFT JOIN `view_quotes` `b`
    ON (`b`.`quote_id` = `a`.`quote_id`)
LIMIT 0, 30

エラーメッセージは次のとおりです:

#1449 - 定義者として指定されたユーザー ('web2vi'@'%') が存在しません

なぜこのエラーが発生するのでしょうか? どうすれば修正できますか?

ベストアンサー1

これは通常、そのオブジェクトを作成したユーザーが存在しないため、あるデータベースまたはサーバーから別のデータベースまたはサーバーにビュー/トリガー/プロシージャをエクスポートするときに発生します。

次の 2 つのオプションがあります。

1. DEFINERを変更する

これは、データベース オブジェクトを最初にインポートするときに、DEFINERダンプからすべてのステートメントを削除することによって実行するのがおそらく最も簡単です。

定義子を後で変更するのは少し難しいです:

ビューの定義者を変更する方法

  1. このSQLを実行して必要なALTERステートメントを生成します

    SELECT CONCAT("ALTER DEFINER= youruser@ hostVIEW ", table_name, " AS ", view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name';

  2. ALTERステートメントをコピーして実行する

ストアドプロシージャの定義者を変更する方法

例:

UPDATE `mysql`.`proc` p SET definer = 'user@%' WHERE definer='root@%'

これにより、すべてのデータベースのすべての定義者が変更されるので注意してください。

2. 不足しているユーザーを作成する

MySQL データベースの使用中に次のエラーが見つかった場合:

The user specified as a definer ('someuser'@'%') does not exist`

次に、次のようにして解決できます。

GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password';
FLUSH PRIVILEGES;

MariaDb バージョン:

GRANT ALL PRIVILEGES ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password';
FLUSH PRIVILEGES;

からhttp://www.lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html

someuserこれはうまくいきました。見つからないユーザーの名前に変更するだけです。ローカル開発サーバーでは、通常は を使用するだけですroot

また、実際にユーザーにALL権限を付与する必要があるかどうか、または権限が少ないほうがよいかどうかも検討してください。

おすすめ記事