[mysql] 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 - The user specified as a definer ('web2vi'@'%') does not exist

왜 그 오류가 발생합니까? 어떻게 고치나요?



답변

이는 일반적으로 해당 오브젝트를 작성한 사용자가 더 이상 존재하지 않으므로 한 데이터베이스 또는 서버에서 다른 데이터베이스 또는 서버로보기 / 트리거 / 프로 시저를 내보낼 때 발생합니다.

두 가지 옵션이 있습니다.

1. DEFINER 변경

DEFINER덤프에서 명령문을 제거하여 데이터베이스 오브젝트를 처음 가져올 때 가장 쉬운 방법 입니다.

나중에 정의자를 변경하는 것은 조금 까다 롭습니다.

뷰의 정의자를 변경하는 방법

  1. 이 SQL을 실행하여 필요한 ALTER 문을 생성하십시오.

    SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ",
    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;

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

이것은 매력처럼 작동했습니다 someuser. 누락 된 사용자의 이름으로 만 변경하면됩니다 . 로컬 개발자 서버에서는 일반적으로을 사용할 수 있습니다 root.

또한 실제로 사용자에게 ALL권한 을 부여 해야하는지 또는 적은 권한으로 수행 할 수 있는지 고려하십시오 .


답변

원래 SQL보기 또는 프로 시저를 작성한 사용자가 삭제되었습니다. 해당 사용자를 다시 작성하면 오류를 해결해야합니다.


답변

mysql을 업데이트 한 후 동일한 오류가 발생했습니다.

이 명령 후에 오류가 수정되었습니다.

mysql_upgrade -u root

mysql_upgrade는 MySQL을 업그레이드 할 때마다 실행되어야합니다. 모든 데이터베이스의 모든 테이블에서 현재 버전의 MySQL 서버와의 비 호환성을 확인합니다. 테이블에 비 호환성이있는 것으로 확인되면 확인합니다. 문제가 발견되면 테이블이 복구됩니다. mysql_upgrade는 시스템 테이블을 업그레이드하여 추가되었을 수있는 새로운 권한이나 기능을 활용할 수 있습니다.


답변

사용자가 존재하면 다음을 수행하십시오.

mysql> flush privileges;


답변

다음과 같이 삭제 된 사용자를 작성하십시오.

mysql> create user 'web2vi';

또는

mysql> create user 'web2vi'@'%';


답변

이 단계를 따르세요:

  1. PHPMyAdmin으로 이동
  2. 데이터베이스를 선택하십시오
  3. 테이블을 선택하세요
  4. 상단 메뉴에서 ‘트리거’를 클릭하십시오
  5. 트리거를 편집하려면 ‘편집’을 클릭하십시오
  6. 정의자를 [user @ localhost]에서 root @ localhost로 변경

그것이 도움이되기를 바랍니다.


답변

솔루션은 아래와 같이 한 줄짜리 쿼리입니다.

grant all on *.* to 'ROOT'@'%' identified by 'PASSWORD' with grant option;

교체 ROOT하여 MySQL의 사용자 이름. PASSWORDmysql 비밀번호로 교체하십시오 .