사이트 용 MySQL 데이터베이스가 두 개 있습니다. 하나는 프로덕션 환경 용이고 다른 하나는 테스트/개발 환경 용입니다. 둘 다 똑같은 스키마를 가지고 있습니다 (물론 내가 바꿀 무언가를 테스트 할 때 제외). 테이블 소수의 국제화 목적 :MySQL 테이블의 내용을 다른 (로컬) 데이터베이스의 테이블에 복사
TransLanguage - 영어 이외의 언어
TransModule - 모듈
TransPhrase (PHP 스크립트에 의해 개별적으로로드 할 수 있습니다 번역 문구의 번들) - 자원 봉사자들에 의해 제출 된 문구의 번역
ChosenTranslatedPhrase - - scre 가능성 번역
TranslatedPhrase을위한 영어 개인 문구, 문구의 ened 번역.
번역을 수행하는 지원자는 일반 사용자와 마찬가지로 프로덕션 사이트에서 모두 작업하고 있습니다.
프로덕션 데이터베이스에서 테스트 데이터베이스로이 네 개의 테이블 (TransLanguage, TransModule, TransPhrase 및 ChosenTranslatedPhrase)의 내용을 동기화하는 데 사용할 수있는 저장 프로 시저를 만들어 테스트 환경을 유지하려고했습니다. 테스트를하는 동안 "알려지지 않은 구문"오류가 발생하지 않도록 방지합니다. 내가 이것을 실행하려고하면
CREATE PROCEDURE `SynchroniseTranslations`()
LANGUAGE SQL
NOT DETERMINISTIC
MODIFIES SQL DATA
SQL SECURITY DEFINER
BEGIN
DELETE FROM `TransLanguage`;
DELETE FROM `TransModule`;
INSERT INTO `TransLanguage` SELECT * FROM `PRODUCTION_DB`.`TransLanguage`;
INSERT INTO `TransModule` SELECT * FROM `PRODUCTION_DB`.`TransModule`;
INSERT INTO `TransPhrase` SELECT * FROM `PRODUCTION_DB`.`TransPhrase`;
INSERT INTO `ChosenTranslatedPhrase` SELECT * FROM `PRODUCTION_DB`.`ChosenTranslatedPhrase`;
END
, 나는 오류 메시지 : "SELECT command denied to user 'username'@'localhost' for table 'TransLanguage'"
내 첫 번째 노력은 테스트 데이터베이스에서 다음 절차를 만드는 것이 었습니다. 또한 다른 방법으로 작업 할 프로 시저를 만들려고했습니다. 즉, 테스트 데이터베이스가 아닌 프로덕션 데이터베이스에 대한 데이터 사전의 일부로 존재했습니다. 내가 그렇게한다면, 그것은 SELECT가 아니라 DELETE 명령이 거부되었다는 것을 제외하고는 동일한 메시지를 얻습니다.
내 사용자가 두 데이터베이스 모두에 대해 INSERT, DELETE, SELECT, UPDATE 및 CREATE ROUTINE 권한을 가지고 있는지 확인했습니다. 그러나 MySQL이이 사용자가 동시에 두 데이터베이스에 대한 권한을 행사하는 것을 꺼려하는 것처럼 보입니다. 왜 이리 와서 거기에 방법이 있을까요?