다음 쿼리를 실행하면 오류가 발생합니다.
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
덤프에서 명령문을 제거하여 데이터베이스 오브젝트를 처음 가져올 때 가장 쉬운 방법 입니다.
나중에 정의자를 변경하는 것은 조금 까다 롭습니다.
뷰의 정의자를 변경하는 방법
-
이 SQL을 실행하여 필요한 ALTER 문을 생성하십시오.
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", table_name, " AS ", view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name';
-
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'@'%';
답변
이 단계를 따르세요:
- PHPMyAdmin으로 이동
- 데이터베이스를 선택하십시오
- 테이블을 선택하세요
- 상단 메뉴에서 ‘트리거’를 클릭하십시오
- 트리거를 편집하려면 ‘편집’을 클릭하십시오
- 정의자를 [user @ localhost]에서 root @ localhost로 변경
그것이 도움이되기를 바랍니다.
답변
솔루션은 아래와 같이 한 줄짜리 쿼리입니다.
grant all on *.* to 'ROOT'@'%' identified by 'PASSWORD' with grant option;
교체 ROOT
하여 MySQL의 사용자 이름. PASSWORD
mysql 비밀번호로 교체하십시오 .