DB

[MySQL] GRANT 완벽 가이드 사용법(권한 부여)

인생아 2025. 1. 8. 13:16
반응형

MySQL GRANT는 사용자의 권한을 설정하거나 수정하는 데 사용되는 명령어입니다. 이 명령어는 데이터베이스 관리에서 필수적인 도구로, 사용자에게 특정 권한을 부여하거나 필요에 따라 세부적으로 제한할 수 있습니다. 이를 통해 데이터베이스 보안을 강화하고, 역할에 맞는 권한을 설정하여 효율적인 관리가 가능합니다.

GRANT의 주요 기능

  1. 권한 부여
    특정 사용자에게 데이터베이스, 테이블, 뷰, 프로시저 등의 권한을 부여할 수 있습니다.
  2. 세부적인 권한 설정
    SELECT, INSERT, UPDATE, DELETE와 같은 작업에 대해 세부적인 설정이 가능합니다.
  3. 호스트별 접근 제어
    특정 IP나 호스트 이름을 지정하여 사용자 접근을 제한할 수 있습니다.
  4. 관리 작업 간소화
    복잡한 권한 설정을 단일 명령어로 간단히 처리할 수 있습니다.
반응형

GRANT 기본 문법

GRANT 권한목록 ON 대상 TO '사용자'@'호스트' [IDENTIFIED BY '비밀번호'] [WITH GRANT OPTION];
  • 권한목록: 부여할 권한(예: SELECT, INSERT, UPDATE, DELETE 등).
  • 대상: 권한을 적용할 데이터베이스나 테이블.
  • 사용자: 권한을 부여받을 사용자 이름.
  • 호스트: 사용자의 접근을 허용할 IP 또는 호스트 이름.
  • IDENTIFIED BY: 사용자의 비밀번호 설정.
  • WITH GRANT OPTION: 부여받은 권한을 다른 사용자에게 다시 부여할 수 있는 옵션.

권한 부여의 실제 예제

전체 권한 부여
특정 데이터베이스에 대한 모든 권한을 부여하려면 다음과 같이 작성합니다:

GRANT ALL PRIVILEGES ON my_database.* TO 'user1'@'localhost' IDENTIFIED BY 'password123';

위 명령어는 my_database 데이터베이스의 모든 권한을 user1 사용자에게 부여합니다.

특정 권한만 부여
특정 작업에 대한 권한만 부여하려면:

GRANT SELECT, INSERT ON my_database.* TO 'user2'@'192.168.1.100' IDENTIFIED BY 'securepassword';

이 경우, user2SELECTINSERT 작업만 수행할 수 있습니다.

반응형

특정 테이블에 권한 부여
데이터베이스 내 특정 테이블에 대해 권한을 부여하려면:

GRANT UPDATE ON my_database.customers TO 'user3'@'%';

위 명령은 customers 테이블에서만 UPDATE 권한을 부여합니다. IP 제한 없이 모든 호스트에서 접근 가능합니다.

GRANT OPTION 활용
사용자가 다른 사용자에게 권한을 부여할 수 있도록 하려면 WITH GRANT OPTION을 추가합니다:

GRANT ALL PRIVILEGES ON my_database.* TO 'admin_user'@'localhost' WITH GRANT OPTION;

이 명령은 admin_user가 부여받은 권한을 다른 사용자에게 부여할 수 있도록 합니다.

권한 확인 방법
권한이 제대로 설정되었는지 확인하려면 SHOW GRANTS 명령어를 사용합니다:

SHOW GRANTS FOR 'user1'@'localhost';

출력 예시:

+---------------------------------------------------------------------------------------------------+
| Grants for user1@localhost                                                                        |
+---------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON `my_database`.* TO 'user1'@'localhost' IDENTIFIED BY PASSWORD '********' |
+---------------------------------------------------------------------------------------------------+
반응형

권한 제거 방법
만약 사용자의 권한을 제거하려면 REVOKE 명령어를 사용합니다. 예를 들어:

REVOKE SELECT, INSERT ON my_database.* FROM 'user2'@'192.168.1.100';

이 명령은 user2에게서 SELECTINSERT 권한을 제거합니다.

GRANT의 실제 활용 예시

다음은 회사의 역할에 따라 권한을 설정하는 예제입니다:

1. 읽기 전용 사용자의 권한 부여

GRANT SELECT ON company_db.* TO 'reader_user'@'192.168.1.150' IDENTIFIED BY 'readonlypass';

2. 전체 관리자 권한 부여

GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'%' IDENTIFIED BY 'adminpass' WITH GRANT OPTION;
반응형

3. 특정 테이블 접근 권한 부여

GRANT INSERT, UPDATE ON sales_db.orders TO 'sales_user'@'localhost';

공식 가이드 문서
MySQL GRANT에 대한 공식 문서: https://dev.mysql.com/doc/refman/8.0/en/grant.html

반응형