Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 사용자에게 권한을 부여하는 방법 – GRANT 문 완벽 정리

MySQL에서 새로 생성한 사용자 계정은 기본적으로 아무런 권한도 갖고 있지 않습니다. 따라서 해당 사용자가 데이터베이스 작업을 수행하려면 반드시 권한을 부여해야 하며, 이때 GRANT 문을 사용합니다.

GRANT 문 기본 구문

GRANT privilege,[privilege],.. ON privilege_level
TO user [IDENTIFIED BY password]
[REQUIRE tsl_option]
[WITH [GRANT_OPTION | resource_option]];

구문 세부 설명

1. 권한(Privilege) 지정 : GRANT 키워드 바로 뒤에 하나 이상의 권한을 지정합니다. 여러 개의 권한을 동시에 부여할 경우 각 권한은 쉼표(,)로 구분합니다.

2. 권한 수준(Privilege Level) 지정 : 권한이 적용될 범위를 결정합니다. MySQL은 전역(*.*), 데이터베이스(database.*), 테이블(database.table), 그리고 컬럼 수준을 지원합니다. 컬럼 수준으로 권한을 부여할 때는 각 권한 뒤에 쉼표로 구분된 하나 이상의 컬럼 목록을 반드시 명시해야 합니다.

3. 대상 사용자 지정 : 권한을 부여할 사용자 계정을 지정합니다. 해당 사용자가 이미 존재하면 GRANT 문은 기존 권한을 수정하고, 존재하지 않으면 새 사용자를 생성합니다. 선택 사항인 IDENTIFIED BY 절을 사용하면 사용자의 새 비밀번호를 설정할 수도 있습니다.

4. 보안 연결 요구 : 사용자가 SSL, X509 등과 같은 보안 연결을 통해 데이터베이스 서버에 접속하도록 요구할지 여부를 지정합니다.

5. WITH 절(선택 사항) : WITH GRANT OPTION을 사용하면 해당 사용자가 자신이 보유한 권한을 다른 사용자에게 부여하거나 회수할 수 있게 됩니다. 또한 WITH 절을 이용해 MySQL 서버의 리소스를 할당할 수 있습니다. 예를 들어 사용자가 시간당 사용할 수 있는 연결 수나 쿼리 수를 제한할 수 있으며, 이는 MySQL 공유 호스팅처럼 여러 사용자가 자원을 나눠 쓰는 환경에서 특히 유용합니다.

실전 예제

아래 예제에서는 사용자를 생성하고 권한을 부여하는 과정을 단계별로 살펴보겠습니다.

mysql> use mysql
Database changed
mysql> create user abcd@localhost identified by 'password123';
Query OK, 0 rows affected (0.04 sec)

다음 쿼리를 실행하면 새로 만든 사용자 계정 abcd@localhost의 현재 권한을 확인할 수 있습니다.

mysql> SHOW GRANTS FOR abcd@localhost;
+------------------------------------------+
| Grants for abcd@localhost                |
+------------------------------------------+
| GRANT USAGE ON *.* TO 'abcd'@'localhost' |
+------------------------------------------+
1 row in set (0.01 sec)

출력 결과의 USAGE는 "권한 없음"을 의미합니다. 즉, 방금 생성한 사용자는 로그인 자격만 있을 뿐 실질적인 작업 권한은 전혀 없는 상태입니다.

이제 abcd@localhost 계정에 모든 권한을 부여하려면 다음 문장을 실행합니다.

mysql> GRANT ALL ON *.* TO 'abcd'@'localhost' WITH GRANT OPTION;
Query OK, 0 rows affected (0.05 sec)

여기서 ON *.* 구문은 모든 데이터베이스와 그 안의 모든 객체를 의미하며, WITH GRANT OPTION은 abcd@localhost가 다른 사용자에게 권한을 부여할 수 있도록 허용하는 역할을 합니다.

SHOW GRANTS 문을 다시 실행하면 abcd@localhost의 권한이 정상적으로 업데이트된 것을 확인할 수 있습니다.

mysql> SHOW GRANTS FOR abcd@localhost;
+---------------------------------------------------------------------+
| Grants for abcd@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'abcd'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
1 row in set (0.00 sec)

참고 : ALL PRIVILEGESWITH GRANT OPTION은 매우 강력한 권한 조합입니다. 운영 환경에서는 보안상의 이유로 필요한 최소한의 권한만 부여하고, 관리자급 권한은 신뢰할 수 있는 계정에만 제한적으로 사용하는 것이 좋습니다.