MySQL에서 GRANT OPTION은 한마디로 “권한을 남에게 나눠줄 수 있는 권한”을 의미합니다. 단순히 데이터를 조작하는 권한을 받는 것을 넘어, 내가 가진 권한을 다른 사용자에게도 부여할 수 있는 ‘관리자급’ 특권입니다.
1. 주요 특징
- 권한의 전파: 이 권한이 있는 사용자는 자신이 보유한 권한에 한해서 다른 계정에 권한을 부여(
GRANT)하거나 회수(REVOKE)할 수 있습니다. - 범위의 제한: 자신이 가지고 있지 않은 권한을 남에게 줄 수는 없습니다. 예를 들어, 내가
SELECT권한만 있다면GRANT OPTION이 있어도 남에게DELETE권한을 줄 수는 없습니다. - 종속성: 관리자가 A에게 권한을 주면서
GRANT OPTION을 부여하고, A가 다시 B에게 권한을 주었을 때, 관리자가 A의 권한을 회수하면 B의 권한도 영향을 받을 수 있습니다 (시스템 설정에 따라 다름).
2. 사용 방법
보통 GRANT 문 끝에 WITH GRANT OPTION이라는 문구를 추가하여 부여합니다.
예시 시나리오:
관리자가 alice라는 사용자에게 sales 데이터베이스에 대한 모든 권한과 함께, 이를 남에게 나눠줄 수 있는 권한을 주려고 합니다.
SQL
|
1 2 3 4 |
GRANT ALL PRIVILEGES ON sales.* TO 'alice'@'localhost' WITH GRANT OPTION; |
이제 alice는 로그인 후 다음과 같은 명령어를 실행할 수 있게 됩니다.
SQL
|
1 2 3 4 5 |
-- alice가 다른 사용자 bob에게 읽기 권한을 부여하는 모습 GRANT SELECT ON sales.* TO 'bob'@'localhost'; |
3. 주의사항 (보안)
GRANT OPTION은 매우 강력하고 위험한 권한입니다.
- 보안 리스크: 이 권한을 가진 사용자가 실수하거나 악의를 품으면, 관리자의 통제를 벗어나 여러 계정에 권한을 남발할 수 있습니다.
- 최소 권한의 원칙: 꼭 필요한 중간 관리자나 DB 담당자가 아니라면 일반 사용자에게는 절대 부여하지 않는 것이 원칙입니다.
- 회수 방법: 권한을 뺏을 때는
REVOKE를 사용합니다.SQLREVOKE GRANT OPTION ON sales.* FROM 'alice'@'localhost';
4. 요약 비교
| 구분 | 일반 권한 (SELECT, INSERT 등) | WITH GRANT OPTION 포함 |
| 데이터 조작 | 가능 | 가능 |
| 타인에게 권한 부여 | 불가능 | 가능 |
| 권한 회수(REVOKE) | 불가능 | 가능 |
| 위험도 | 낮음~중간 | 매우 높음 |
쉽게 비유하자면, 일반 권한은 “도서관에서 책을 빌릴 수 있는 카드”이고, GRANT OPTION은 “다른 사람에게 도서관 대출 카드를 발급해 줄 수 있는 권한”이라고 보시면 됩니다.

오류 원인은 현재 로그인한 MySQL 계정에 GRANT OPTION 권한이 없기 때문입니다.
에러 핵심:
|
1 2 3 |
You must have the GRANT OPTION privilege |
즉,
현재 사용자로는 auctionpro@% 사용자에게 권한을 부여할 권한 자체가 없습니다.
보통 다음 상황입니다:
- 일반 관리자 계정 사용 중
- root 가 아님
- DBA 권한 부족
- AWS RDS 등 제한 환경
해결 방법:
root 또는 충분한 권한 계정으로 접속 후 실행:
|
1 2 3 |
GRANT ALL PRIVILEGES ON auctionpro.* TO 'auctionpro'@'%'; |
또는 필요한 권한만:
|
1 2 3 4 5 |
GRANT SELECT, INSERT, UPDATE, DELETE ON auctionpro.* TO 'auctionpro'@'%'; |
그리고:
|
1 2 3 |
FLUSH PRIVILEGES; |
