MariaDB 사용자 관리 가이드: 사용자 생성, 권한 부여 및 일반 오류 해결 방법

目次

소개

1.1 MariaDB에서 사용자를 생성하는 방법을 배우고 싶으신가요?

MariaDB에서 새 사용자를 생성하고 적절한 권한을 설정하고 싶었던 적이 있나요?
예를 들어, 다음과 같은 상황을 겪었을 수 있습니다:

  • CREATE USER를 실행했지만 로그인할 수 없습니다
  • GRANT를 사용해 권한을 부여했지만 적용되지 않았습니다
  • 프로덕션 환경에서 적절한 권한을 어떻게 설정해야 할지 모릅니다
  • 불필요한 사용자를 안전하게 삭제하고 싶습니다

이러한 문제에 직면해 있다면, 이 문서는 MariaDB에서 사용자를 생성하고 권한을 관리하며 사용자를 삭제하는 전체 과정을 완전히 이해하도록 도와줄 것입니다.

1.2 이 문서에서 배우게 될 내용

이 문서는 MariaDB 사용자 관리의 다음 측면에 대해 자세히 설명합니다:

  • MariaDB에서 사용자 생성 및 삭제 방법
  • 권한 부여 및 관리 방법 (적절한 권한 설정을 위한 모범 사례)
  • 일반적인 오류와 해결 방법
  • 개발 및 프로덕션 환경을 위한 최선의 운영 관행

모든 주제는 초보자 친화적인 SQL 예제와 함께 설명되어 동시에 학습하고 연습할 수 있습니다.

1.3 대상 독자

이 문서는 다음 독자를 대상으로 합니다:

  • 초보자: MariaDB 사용자 관리를 처음 배우는 사람
  • 엔지니어: 개발 환경에서 적절한 권한을 구성하고자 하는 사람
  • 데이터베이스 관리자: 프로덕션 환경에서 보안을 강화하려는 사람

MariaDB가 처음이라도, 이 가이드는 실제 운영에 자신 있게 적용할 수 있는 실용적인 정보를 제공합니다.

MariaDB에서 사용자 생성

2.1 기본 사용자 생성 명령

MariaDB에서는 CREATE USER 명령을 사용하여 새 사용자를 생성합니다.
다음 구문을 사용하여 사용자 이름과 비밀번호를 지정할 수 있습니다:

CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';

예를 들어, localhost에서 비밀번호 password123을 가진 yamada 사용자를 생성하려면:

CREATE USER 'yamada'@'localhost' IDENTIFIED BY 'password123';

이 명령을 실행하면 yamada 사용자가 생성되고 localhost에서만 로그인할 수 있도록 허용됩니다 (서버 자체에서만 로그인 허용).

2.2 사용 사례별 사용자 생성 예시

MariaDB에서 사용자를 생성할 때 hostname 필드를 사용하여 연결을 허용할 위치를 지정할 수 있습니다.
사용 사례에 따라 설정을 적절히 구성하는 것이 중요합니다.

CaseCommand ExampleDescription
Local Environment (Development)CREATE USER 'dev_user'@'localhost' IDENTIFIED BY 'password';User dedicated to development environment
Allow Remote ConnectionsCREATE USER 'remote_user'@'%' IDENTIFIED BY 'password';Allow connections from any host (security caution required)
Allow Connection from Specific IPCREATE USER 'admin'@'192.168.1.100' IDENTIFIED BY 'password';Restrict access to a specific IP address only
Allow Connection from Specific SubnetCREATE USER 'network_user'@'192.168.1.%' IDENTIFIED BY 'password';Allow only machines with IP addresses in the 192.168.1.x range

'%'를 사용하면 모든 호스트에서의 연결을 허용하지만,
이는 심각한 보안 위험을 초래하며 프로덕션 환경에서는 권장되지 않습니다.
프로덕션에서는 IP 주소를 지정하거나 VPN을 통한 접근을 구성하는 것이 가장 좋습니다.

2.3 사용자 생성 시 중요한 주의사항

사용자를 생성할 때 몇 가지 중요한 고려사항이 있습니다.

(1) 기존 사용자 확인

사용자를 생성하기 전에 동일한 사용자가 이미 존재하지 않는지 확인하는 것이 중요합니다.
다음 명령으로 현재 등록된 사용자를 나열할 수 있습니다:

SELECT user, host FROM mysql.user;

예시 출력:

+---------+-----------+
| user    | host      |
+---------+-----------+
| root    | localhost |
| yamada  | localhost |
+---------+-----------+

동일한 username@hostname 사용자가 이미 존재하면 CREATE USER 실행 시 오류가 발생합니다.

(2) 사용자가 이미 존재할 경우 대처 방법

MariaDB에서는 기존 사용자를 재생성하여 덮어쓸 수 없습니다.
동일한 사용자가 이미 존재한다면 다음 중 하나의 방법을 사용하십시오:

  • 기존 사용자의 비밀번호 변경
    ALTER USER 'yamada'@'localhost' IDENTIFIED BY 'newpassword123';
    
  • 불필요한 사용자를 삭제하고 새로 생성
    DROP USER 'yamada'@'localhost';
    CREATE USER 'yamada'@'localhost' IDENTIFIED BY 'password123';
    

MariaDB에서 권한 관리

3.1 권한 부여

기본 구문

MariaDB에서는 GRANT 명령을 사용하여 사용자에게 권한을 부여할 수 있습니다.

GRANT privilege ON database_name.table_name TO 'username'@'hostname';

예를 들어, 사용자 yamada에게 test_db에 대한 전체 권한을 부여하려면:

GRANT ALL PRIVILEGES ON test_db.* TO 'yamada'@'localhost';

이 명령의 의미:

  • ALL PRIVILEGES : 모든 권한을 부여합니다
  • test_db.* : test_db 데이터베이스의 모든 테이블에 적용됩니다
  • 'yamada'@'localhost' : localhost에서 로그인하는 사용자 yamada에 적용됩니다

3.2 일반적으로 사용되는 권한

MariaDB에서는 다음과 같은 권한을 부여할 수 있습니다:

PrivilegeDescription
ALL PRIVILEGESGrant all privileges
SELECTRead data
INSERTInsert data
UPDATEUpdate data
DELETEDelete data
CREATECreate new tables or databases
DROPDrop databases or tables
GRANT OPTIONGrant privileges to other users
ALTERModify table structure
EXECUTEExecute stored procedures or functions
RELOADReload server settings

특정 작업만 허용하려면 모든 권한을 부여하기보다 개별적으로 권한을 부여하는 것이 권장됩니다.

3.3 사용 사례별 권한 설정

각 상황에 맞는 적절한 권한을 할당하는 것이 중요합니다.

SituationRecommended PrivilegesCommand Example
WordPress OperatorSELECT, INSERT, UPDATE, DELETEGRANT SELECT, INSERT, UPDATE, DELETE ON wp_db.* TO 'wp_user'@'localhost';
Developer (Development Environment)ALL PRIVILEGESGRANT ALL PRIVILEGES ON dev_db.* TO 'dev_user'@'%';
Read-Only UserSELECT onlyGRANT SELECT ON analytics_db.* TO 'readonly'@'localhost';
Database Administrator (Production Environment)ALL PRIVILEGES (restricted)GRANT ALL PRIVILEGES ON production_db.* TO 'admin'@'localhost';

운영 환경에서는 ALL PRIVILEGES를 쉽게 부여하지 않도록 주의하세요.

3.4 부여된 권한 확인

부여된 권한을 확인하려면 SHOW GRANTS 명령을 사용합니다.

SHOW GRANTS FOR 'username'@'hostname';

예를 들어, 사용자 yamada의 권한을 확인하려면:

SHOW GRANTS FOR 'yamada'@'localhost';

예시 출력:

+-----------------------------------------------------------------------------------+
| Grants for yamada@localhost                                                       |
+-----------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE ON test_db.* TO 'yamada'@'localhost'                |
+-----------------------------------------------------------------------------------+

이는 현재 해당 사용자에게 부여된 권한을 보여줍니다.

3.5 권한 회수 (권한 제거)

사용자에게 부여된 특정 권한을 회수하려면 REVOKE 명령을 사용합니다.

기본 구문

REVOKE privilege ON database_name.table_name FROM 'username'@'hostname';

예를 들어, 사용자 yamada에게서 UPDATE 권한을 회수하려면:

REVOKE UPDATE ON test_db.* FROM 'yamada'@'localhost';

모든 권한 회수

REVOKE ALL PRIVILEGES ON *.* FROM 'yamada'@'localhost';

3.6 권한 변경이 적용되지 않을 때 대처 방법

MariaDB에서는 권한 변경이 즉시 적용되지 않을 수 있습니다. 이런 경우 다음 명령을 실행하십시오:

FLUSH PRIVILEGES;

이 명령을 실행하면 MariaDB가 권한 테이블을 다시 로드하도록 강제하여 변경 사항이 즉시 적용됩니다.

MariaDB에서 사용자 삭제

4.1 사용자 삭제

MariaDB 사용자를 삭제하려면 DROP USER 명령을 사용합니다.

기본 구문

DROP USER 'username'@'hostname';

예를 들어, localhost에서 사용자 yamada를 삭제하려면:

DROP USER 'yamada'@'localhost';

이 명령을 실행하면 사용자 yamada는 MariaDB 시스템에서 완전히 제거됩니다.

4.2 사용자 삭제 전 확인 사항

사용자를 삭제하기 전에 수행해야 할 중요한 확인 사항이 있습니다. 필요한 사용자를 실수로 삭제하지 않도록 주의하세요.

(1) 대상 사용자가 존재하는지 확인

MariaDB에서 존재하지 않는 사용자를 삭제하려고 하면 오류가 발생합니다. 대상 사용자가 존재하는지 확인하려면 다음 명령을 실행하십시오:

SELECT user, host FROM mysql.user;

예시 출력:

+---------+-----------+
| user    | host      |
+---------+-----------+
| root    | localhost |
| yamada  | localhost |
| admin   | 192.168.1.100 |
+---------+-----------+

이 목록에 사용자 yamada가 나타나면 해당 사용자를 삭제할 수 있습니다.

(2) 사용자가 현재 연결되어 있는지 확인

MariaDB에서 삭제하려는 사용자가 현재 활성 세션을 가지고 있는 경우, 해당 세션에 대해 삭제가 즉시 적용되지 않을 수 있습니다. 다음 명령을 사용하여 사용자가 활성 상태인지 확인하십시오:

SELECT user, host FROM information_schema.processlist;

예시 출력:

+---------+-----------+
| user    | host      |
+---------+-----------+
| yamada  | localhost |
| root    | localhost |
+---------+-----------+

이 예시에서 사용자 yamada는 현재 활성 상태이므로 삭제하기 전에 세션을 종료해야 합니다.

(3) 세션 강제 종료

KILL 명령을 사용하여 특정 세션을 강제로 종료할 수 있습니다.

  1. 먼저, 프로세스 ID(ID 열)를 확인합니다:
    SELECT id, user, host FROM information_schema.processlist;
    

예시 출력:

+----+---------+-----------+
| id | user    | host      |
+----+---------+-----------+
| 10 | yamada  | localhost |
| 11 | root    | localhost |
+----+---------+-----------+
  1. yamada의 프로세스 ID가 10인 경우, 다음과 같이 종료합니다:
    KILL 10;
    

4.3 삭제 후 정리

사용자를 삭제한 후에도 데이터베이스에 남은 권한 정보가 남아 있을 수 있습니다.
이러한 경우 FLUSH PRIVILEGES를 실행하여 권한 테이블을 새로 고칩니다.

FLUSH PRIVILEGES;

이를 실행하면 삭제된 사용자의 정보가 데이터베이스 시스템에서 완전히 제거됩니다.

4.4 사용자를 삭제할 때 중요한 주의사항

사용자를 삭제할 때 다음 사항을 유념하십시오:

  1. 삭제된 사용자는 복구할 수 없습니다
  • DROP USER를 실행하면 삭제된 사용자를 복구할 수 없습니다.
  • 실수로 삭제한 경우 CREATE USER를 사용하여 사용자를 다시 생성해야 합니다.
  1. 권한을 이전해야 할 수 있습니다
  • 삭제된 사용자가 중요한 데이터베이스 작업을 담당하고 있었다면, 필요한 권한을 사전에 다른 적절한 사용자에게 이전해야 합니다.
  1. 운영 환경에서 주의하십시오
  • 운영 환경에서 갑작스러운 삭제는 시스템 다운타임이나 오류를 초래할 수 있습니다.
  • 사전에 영향을 분석하고 백업을 생성하는 것이 강력히 권장됩니다.

일반 오류 및 해결책 (FAQ)

MariaDB에서 사용자를 관리할 때 다양한 오류가 발생할 수 있습니다.
이 섹션에서는 가장 흔한 오류, 원인 및 해결 방법을 설명합니다.

5.1 초보자 FAQ

Q1: MariaDB와 MySQL 사용자 관리의 차이점은 무엇인가요?

MariaDB와 MySQL은 일반적으로 동일한 구문을 사용하지만, 몇 가지 기능 차이가 있습니다.

Comparison ItemMySQLMariaDB
CREATE USERSupportedSupported
SHOW GRANTS FORSupportedSupported
DROP USERSupportedSupported
CREATE ROLEMySQL 8.0 and laterMariaDB 10.0 and later

MariaDB는 CREATE ROLE을 지원하여 역할 기반 사용자 관리를 가능하게 합니다.

Q2: localhost%의 차이점은 무엇인가요?

MariaDB 사용자 관리에서는 호스트명을 지정하는 것이 중요합니다.

  • localhost : 로컬 머신에서만 연결을 허용합니다
  • % : 모든 호스트에서 연결을 허용합니다(보안 위험)
  • 192.168.1.100 : 특정 IP 주소에서만 연결을 허용합니다
  • 192.168.1.% : 특정 서브넷(192.168.1.*)에서만 연결을 허용합니다

5.2 문제 해결

Q3: “ERROR 1396 (HY000): Operation CREATE USER failed” 오류 해결 방법

원인: 지정된 사용자가 이미 존재하므로 새 사용자를 생성할 수 없습니다.

해결책: 사용자가 존재하는지 확인하고 필요에 따라 삭제하거나 수정합니다.

  1. 기존 사용자 확인
    SELECT user, host FROM mysql.user WHERE user='yamada';
    
  1. 불필요한 경우 삭제
    DROP USER 'yamada'@'localhost';
    
  1. 대신 비밀번호 변경
    ALTER USER 'yamada'@'localhost' IDENTIFIED BY 'newpassword123';
    

Q4: GRANT로 부여된 권한이 적용되지 않음

원인: MariaDB 권한 캐시가 새로 고쳐지지 않았습니다.

해결책: FLUSH PRIVILEGES를 실행하여 권한을 다시 로드합니다.

FLUSH PRIVILEGES;

Q5: %를 사용해도 원격 연결이 안 됨

원인: MariaDB 설정 파일에서 원격 연결이 제한될 수 있습니다.

해결책:

  1. 설정 파일 /etc/mysql/my.cnf(또는 /etc/mysql/mariadb.conf.d/50-server.cnf)를 편집하고 bind-address 값을 0.0.0.0으로 변경합니다.
    bind-address = 0.0.0.0
    
  1. MariaDB를 재시작합니다.
    sudo systemctl restart mariadb
    
  1. GRANT 명령에 %를 사용하여 연결을 허용합니다.
    GRANT ALL PRIVILEGES ON test_db.* TO 'remote_user'@'%' IDENTIFIED BY 'password';
    

Q6: “Access denied for user ‘user’@’host'” 오류

원인: 사용자가 적절한 권한이 없거나 비밀번호가 올바르지 않습니다.

해결책:

  1. 현재 권한 확인
    SHOW GRANTS FOR 'user'@'host';
    
  1. 적절한 권한 부여
    GRANT ALL PRIVILEGES ON database_name.* TO 'user'@'host';
    
  1. 올바른 비밀번호로 로그인했는지 확인
    mysql -u user -p
    

결론

MariaDB 사용자 관리는 데이터베이스 보안 및 운영 효율성을 향상시키는 데 필수적입니다.
이 문서에서는 사용자 생성, 권한 관리, 사용자 삭제, 그리고 일반적인 오류와 그 해결책에 대해 자세히 다루었습니다.

6.1 요약

① MariaDB에서 사용자 생성

  • CREATE USER 명령을 사용하여 새 사용자를 생성합니다
  • @'hostname'을 사용하여 접근을 제한합니다
  • 새 사용자를 만들기 전에 항상 기존 사용자를 확인합니다

② MariaDB에서 권한 관리

  • GRANT를 사용하여 필요 최소 권한을 부여합니다
  • SHOW GRANTS를 사용하여 현재 권한을 확인합니다
  • REVOKE를 사용하여 불필요한 권한을 제거합니다
  • FLUSH PRIVILEGES로 변경 사항을 적용합니다

③ MariaDB에서 사용자 삭제

  • DROP USER 명령으로 사용자를 삭제합니다
  • 삭제하기 전에 활성 세션을 확인합니다
  • FLUSH PRIVILEGES를 사용하여 권한 캐시를 정리합니다

④ 일반적인 오류와 해결책

  • ERROR 1396 (HY000)기존 사용자를 확인하고 필요하면 삭제
  • 권한 변경이 적용되지 않음 → FLUSH PRIVILEGES 실행
  • Access denied for user권한 및 비밀번호 확인
  • % 로 원격 연결 불가 → bind-address 설정 조정

6.2 MariaDB 사용자 관리 모범 사례

  • 필요 최소 권한만 부여
  • ALL PRIVILEGES를 함부로 부여하지 않기
  • 가능하면 프로덕션 사용자를 SELECT, INSERT, UPDATE, DELETE 로 제한
  • 항상 권한 변경을 확인
  • SHOW GRANTS를 사용해 설정이 올바른지 확인
  • 사용자 삭제 전 영향 분석
  • 프로덕션에서는 주의하고 백업 생성
  • 강력한 보안 관행 적용
  • 원격 연결에 IP 제한 적용
  • root 사용자에 강력한 비밀번호 설정
  • 불필요한 사용자와 권한을 정기적으로 제거

6.3 최종 생각

이 가이드를 통해 MariaDB 사용자 관리의 기본부터 고급 기술까지 모두 배웠습니다.
이 지식을 활용하여 안전하고 효율적인 데이터베이스 관리를 실현하세요.

앞으로도 유용한 MariaDB 관련 인사이트를 계속 공유할 예정이니 기대해 주세요! 🚀