본문 바로가기
Solution

MySQL|error 1227 (42000) at line 18: access denied; you need (at least one of) the super, system_variables_admin or session_variables_admin privilege(s) for this operation workbench에러

by 호호호호히히히히 2025. 2. 13.
728x90
반응형
🛑 에러
  • error 1227 (42000) at line 18: access denied; you need (at least one of) the super, system_variables_admin or session_variables_admin privilege(s) for this operation workbench

 

⚠️  원인
  • 이 오류는 import/restore 하려는 계정에 super, system_variables_admin 또는 session_variables_admin 권한이 없어 발생하는 에러로MySQL 서버가 사용자가 아닌 다른 DEFINER가 지정된 sql 파일을 허용하지 않기 때문입니다.

 

🛠️ 해결 방안

 

1. root 계정으로 Import (권장)

- MySQL에서는 일반 계정이 SUPER, SYSTEM_VARIABLES_ADMIN, SESSION_VARIABLES_ADMIN 등의 권한 없이 DB Import를 수행하는 것이 보안 정책상 허용되지 않습니다.
따라서, root 또는 권한이 충분한 계정을 사용하여 Import하는 것이 가장 안전한 방법입니다.

 

2. 권한 부여

- import/restore 하려는 계정에 root 권한을 부여합니다.

# Docker 컨테이너 접속
docker exec -it <mysql-container-name> bash

# MySQL 접속 (root 계정)
mysql -u root -p

# 권한 확인
SHOW GRANTS FOR '[계정]'@'%';

# 필요 권한 부여
GRANT SYSTEM_VARIABLES_ADMIN, SESSION_VARIABLES_ADMIN ON *.* TO '[계정]'@'%'; FLUSH PRIVILEGES;

 

3. dump시 옵션 추가

- mysqldump 실행 시  --set-gtid-purged=OFF 옵션을 추가합니다. (원본 db)

mysqldump -u root -p --set-gtid-purged=OFF [your_database] > your_dump_file.sql

 

4. dump 파일 내 DEFINER 제거

- SQL 파일에 DEFINER='root@localhost'가 포함되어 있다면 dev 계정이 권한이 없어 import가 실패할 수 있습니다.
이 경우 sed 명령어를 사용하여 DEFINER를 제거합니다.

sed -i 's/DEFINER=[^ ]*//' your_dump_file.sql

또는 직접 your_dump_file.sql을 열어 DEFINER='...'을 제거합니다.


✅ 종합

위 방법 중 하나를 선택하여 Import를 진행하면 error 1227 (42000) 문제를 해결할 수 있습니다.
가장 권장되는 방법은 root 계정으로 Import하는 것이며,

불가능할 경우 권한을 부여하거나 dump 파일을 수정하는 방식을 사용할 수 있습니다.

반응형

댓글