EC2 MySQL을 Amazon RDS로 마이그레이션하려는 첫 번째 시도가 제대로 진행되지 않음-SUPER 권한


11

EC2에서 실행되는 MySQL에서 기존 Amazon DB를 새로운 Amazon RDS 인스턴스 (이동할 수 있는지 실험)로 옮기려고했습니다. 지금까지는 잘 진행되지 않습니다. 복제를 설정하기 전에 초기 가져 오기에 멈췄습니다 ( 여기 지침 ).

설명 된대로 RDS 인스턴스를 준비했으며 mysql을 사용하여 EC2 인스턴스에서 연결할 수 있습니다. mysqldump 명령을 다음과 같이 실행했습니다.

mysqldump --master-data --databases db1 db2 > dump.sql

그런 다음 다음을 사용하여 RDS에 업로드를 시도했습니다.

mysql -h RDSHost -P 3306 -u rdsuser --password=rdspassword < dump.sql

첫 번째 문제는 덤프 22 행에있었습니다.

MASTER_LOG_FILE = 'mysql-bin.000002'로 마스터 변경, MASTER_LOG_POS = 106;

이 줄로 인해 오류가 발생했습니다 ERROR 1227 (42000) at line 22: Access denied; you need (at least one of) the SUPER privilege(s) for this operation. 문제 없습니다. 해당 라인을 주석 처리하고 나중에 mysql.rds_set_external_master ()를 통해 수정하려고합니다. 업로드를 재 시도하고 매우 유사한 오류가 발생했습니다 : ERROR 1227 (42000) at line 7844: Access denied; you need (at least one of) the SUPER privilege(s) for this operation. 7844 행 주위의 섹션은 다음과 같습니다.

/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`dev`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `jos_contributor_ids_view` AS select `jos_resource_contributors_view`.`uidNumber` AS `uidNumber` from `jos_resource_contributors_view` union select `jos_wiki_contributors_view`.`uidNumber` AS `uidNumber` from `jos_wiki_contributors_view` */;

처음 두 줄을 주석 처리하고 세 번째 줄에 'CREATE'를 추가하면이 줄을 지나갈 수있었습니다. 그러나 거기 이 같은 섹션은. 모든 편집 없이이 방법을 사용할 수 있습니까? mysqldump슈퍼 특권이 필요한 것을 생산하지 않는 옵션처럼 ?

sedmysqldump / mysqlbinlog의 출력에 대해 실행 해야하는 것과 같이 많은 사람들이 비슷한 문제를 겪고있는 것처럼 보입니다 ! AWS 포럼에도 게시 할 예정입니다. 실제로 RDS에는 mysqldump에서 가져 오는 더 관용적 인 방법이나 기존 db에 대해 실행할 수있는 특정 도구가 있어야 RDS 보안에 불만이있는 덤프를 만들 수 있다고 생각합니다. 누군가 여기에 도움이 될 다른 요리법이나 트릭이 있는지 궁금합니다.

감사,

데이브


죄송합니다 - 나는 변화 시도했습니다 말을 잊었 log_bin_trust_function_creators1 매개 변수를 여전히 줄에서 7844. 같은 오류를 얻을 수
DSL101

이전 게시물이지만을 말하면 피할 수있는 첫 번째 오류 --masterdata=2입니다. 그런 다음 해당 줄은 덤프에서 주석 처리됩니다.
Halfgaar

답변:


26

log_bin_trust_function_creatorsRDS에서는 1 = 1 이 필요할 수 있지만 여기서는 문제가되지 않습니다.

 권한 DEFINER 이있는 경우에만 자신의 계정 이외 의 값을  지정할 수 있습니다  SUPER.

http://dev.mysql.com/doc/refman/5.6/en/stored-programs-security.html

저장된 프로그램 (proc, function, event 또는 trigger)이 실행 중일 때, 프로그램을 정의한 사용자 또는 DEFINER선언 으로 명시 적으로 언급 한 사용자의 권한을 갖습니다 . 이를 통해 저장된 프로그램이 다른 사용자가 저장된 프로그램 자체를 사용할 권한이있는 한 직접 조작 할 수있는 권한이없는 데이터에 대해 다른 사용자가 작업을 수행 할 수 있습니다.

따라서 SUPER사용자가 임의로 자신의 권한을 에스컬레이션 할 수 있기 때문에 비 사용자가 임의의 정의 자로 프로 시저를 작성할 수 있는 경우 심각한 취약점 이됩니다.

물론 게시 한 예제와 같이 정의 자 보안 컨텍스트가 사용되는 경우에도 마찬가지입니다.

내가 RDS에 대해 가장 큰 불만 중 하나는 당신이 가질 수 없다는 것입니다 SUPER... 그리고 지금 당신도 할 수 있습니다 :) 그 사실은 당신이 겪고있는 문제의 원인이기 때문입니다.

물론, 관리 형 MySQL 서비스를 실행하고 있다면 누구도 제공하지 않으므로 SUPER보안 모델이 때로는 다루기 힘든 경우에도 의미가 있습니다.

모든 객체에 동일한 정의자가있는 경우 해결 방법은 현재 사용중인 계정 대신 해당 계정을 사용하여 덤프를 복원하는 것입니다.

DEFINER선언이 있는 줄만 삭제 하면 덤프 파일이 줄에 표시되는 경우 덤프 파일이 작동하거나 sed 또는 perl을 사용하여 파일을 수정할 수 있습니다 ... 나는 이미 당신이 좋아하지 않는다는 생각, 그러나 실제로 그러한 해커는 합법적이며 MySQL이 아닌 환경에서도 DBA로해야 할 일과는 거리가 멀다는 것은 MySQL의 좋은 점입니다.

perl -pe 's/\sDEFINER=`[^`]+`@`[^`]+`//' < oldfile.sql > newfile.sql

... 원하는 대답이 아닐 수도 있지만 덤프 파일에 대해 실행할 수 있으며 약간 더 유용한 파일로 끝나야합니다.


포괄적 인 답변과 sed / perl에 대한 생각이 유일한 솔루션임을 확인해 주셔서 감사합니다. 내가 사용하는 응용 프로그램은 매우 맞춤화 된 Joomla이며 오픈 소스 인 동안 RDS로 잘 이동할 경우 분석 할 시간 / 기술이 없습니다. 제 생각은 '시도해 보았습니다'였습니다. 그러나 아마존의 부적절한 마이그레이션 도구로 인해 첫 번째 단계가 가장 어려운 것처럼 보입니다. 보안 모델에 동의하지만 mysqldump의 기본 출력으로 인해 많은 문제가 발생하면 더 나은 솔루션이없는 이유는 무엇입니까? 나는 이것들도 이것에 대해 물을 것이다.
dsl101

1
대박. 그 펄 스크립트에 너무 감사합니다. 내 백업은 4GB 이상이었으며이를 여는 것이 어려웠습니다. 이것은 나의 하루를 구했다.
Emile Baizel

1
훌륭한 설명, 훌륭한 답변 및 훌륭한 솔루션! 바보 정의 자.
rkaregaran

4
펄 하나의 라이너에 너무 감사합니다. 내가 찾은 것은 실제로 작동하는 유일한 방법입니다. 이 보드의 다른 많은 사람들은 단순히 그렇지 않습니다. 할 수 있으면 다시 찬성했습니다.
lucian303

1

제 경우에는 오류가 발생한 덤프의 "CHANGE MASTER TO MASTER_LOG_FILE = ..."줄이었습니다. 이 줄은 mysqldump의 "--master-data"옵션에 의해 추가되었습니다. 대신 읽어 아마존 AWS에서 당신은 "mysql.rds_set_external_master"절차 마스터 세부 사항을 설정하여 복제를 시작할 필요가 여기에

따라서 22 행에서 오류가보고 된 "head 22 backup.dump"행을 기록했습니다. 그런 다음 가져 오기 전에 파일을 제거하십시오. 큰 파일의 경우 : "sed '22d'backup.dump> backup_clean.dump"

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.