소개
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 필드를 사용하여 연결을 허용할 위치를 지정할 수 있습니다.
사용 사례에 따라 설정을 적절히 구성하는 것이 중요합니다.
| Case | Command Example | Description |
|---|---|---|
| Local Environment (Development) | CREATE USER 'dev_user'@'localhost' IDENTIFIED BY 'password'; | User dedicated to development environment |
| Allow Remote Connections | CREATE USER 'remote_user'@'%' IDENTIFIED BY 'password'; | Allow connections from any host (security caution required) |
| Allow Connection from Specific IP | CREATE USER 'admin'@'192.168.1.100' IDENTIFIED BY 'password'; | Restrict access to a specific IP address only |
| Allow Connection from Specific Subnet | CREATE 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에서는 다음과 같은 권한을 부여할 수 있습니다:
| Privilege | Description |
|---|---|
ALL PRIVILEGES | Grant all privileges |
SELECT | Read data |
INSERT | Insert data |
UPDATE | Update data |
DELETE | Delete data |
CREATE | Create new tables or databases |
DROP | Drop databases or tables |
GRANT OPTION | Grant privileges to other users |
ALTER | Modify table structure |
EXECUTE | Execute stored procedures or functions |
RELOAD | Reload server settings |
특정 작업만 허용하려면 모든 권한을 부여하기보다 개별적으로 권한을 부여하는 것이 권장됩니다.
3.3 사용 사례별 권한 설정
각 상황에 맞는 적절한 권한을 할당하는 것이 중요합니다.
| Situation | Recommended Privileges | Command Example |
|---|---|---|
| WordPress Operator | SELECT, INSERT, UPDATE, DELETE | GRANT SELECT, INSERT, UPDATE, DELETE ON wp_db.* TO 'wp_user'@'localhost'; |
| Developer (Development Environment) | ALL PRIVILEGES | GRANT ALL PRIVILEGES ON dev_db.* TO 'dev_user'@'%'; |
| Read-Only User | SELECT only | GRANT 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 명령을 사용하여 특정 세션을 강제로 종료할 수 있습니다.
- 먼저, 프로세스 ID(
ID열)를 확인합니다:SELECT id, user, host FROM information_schema.processlist;
예시 출력:
+----+---------+-----------+
| id | user | host |
+----+---------+-----------+
| 10 | yamada | localhost |
| 11 | root | localhost |
+----+---------+-----------+
yamada의 프로세스 ID가10인 경우, 다음과 같이 종료합니다:KILL 10;
4.3 삭제 후 정리
사용자를 삭제한 후에도 데이터베이스에 남은 권한 정보가 남아 있을 수 있습니다.
이러한 경우 FLUSH PRIVILEGES를 실행하여 권한 테이블을 새로 고칩니다.
FLUSH PRIVILEGES;
이를 실행하면 삭제된 사용자의 정보가 데이터베이스 시스템에서 완전히 제거됩니다.
4.4 사용자를 삭제할 때 중요한 주의사항
사용자를 삭제할 때 다음 사항을 유념하십시오:
- 삭제된 사용자는 복구할 수 없습니다
DROP USER를 실행하면 삭제된 사용자를 복구할 수 없습니다.- 실수로 삭제한 경우
CREATE USER를 사용하여 사용자를 다시 생성해야 합니다.
- 권한을 이전해야 할 수 있습니다
- 삭제된 사용자가 중요한 데이터베이스 작업을 담당하고 있었다면, 필요한 권한을 사전에 다른 적절한 사용자에게 이전해야 합니다.
- 운영 환경에서 주의하십시오
- 운영 환경에서 갑작스러운 삭제는 시스템 다운타임이나 오류를 초래할 수 있습니다.
- 사전에 영향을 분석하고 백업을 생성하는 것이 강력히 권장됩니다.
일반 오류 및 해결책 (FAQ)
MariaDB에서 사용자를 관리할 때 다양한 오류가 발생할 수 있습니다.
이 섹션에서는 가장 흔한 오류, 원인 및 해결 방법을 설명합니다.
5.1 초보자 FAQ
Q1: MariaDB와 MySQL 사용자 관리의 차이점은 무엇인가요?
MariaDB와 MySQL은 일반적으로 동일한 구문을 사용하지만, 몇 가지 기능 차이가 있습니다.
| Comparison Item | MySQL | MariaDB |
|---|---|---|
CREATE USER | Supported | Supported |
SHOW GRANTS FOR | Supported | Supported |
DROP USER | Supported | Supported |
CREATE ROLE | MySQL 8.0 and later | MariaDB 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” 오류 해결 방법
원인: 지정된 사용자가 이미 존재하므로 새 사용자를 생성할 수 없습니다.
해결책: 사용자가 존재하는지 확인하고 필요에 따라 삭제하거나 수정합니다.
- 기존 사용자 확인
SELECT user, host FROM mysql.user WHERE user='yamada';
- 불필요한 경우 삭제
DROP USER 'yamada'@'localhost';
- 대신 비밀번호 변경
ALTER USER 'yamada'@'localhost' IDENTIFIED BY 'newpassword123';
Q4: GRANT로 부여된 권한이 적용되지 않음
원인: MariaDB 권한 캐시가 새로 고쳐지지 않았습니다.
해결책: FLUSH PRIVILEGES를 실행하여 권한을 다시 로드합니다.
FLUSH PRIVILEGES;
Q5: %를 사용해도 원격 연결이 안 됨
원인: MariaDB 설정 파일에서 원격 연결이 제한될 수 있습니다.
해결책:
- 설정 파일
/etc/mysql/my.cnf(또는/etc/mysql/mariadb.conf.d/50-server.cnf)를 편집하고bind-address값을0.0.0.0으로 변경합니다.bind-address = 0.0.0.0
- MariaDB를 재시작합니다.
sudo systemctl restart mariadb
GRANT명령에%를 사용하여 연결을 허용합니다.GRANT ALL PRIVILEGES ON test_db.* TO 'remote_user'@'%' IDENTIFIED BY 'password';
Q6: “Access denied for user ‘user’@’host'” 오류
원인: 사용자가 적절한 권한이 없거나 비밀번호가 올바르지 않습니다.
해결책:
- 현재 권한 확인
SHOW GRANTS FOR 'user'@'host';
- 적절한 권한 부여
GRANT ALL PRIVILEGES ON database_name.* TO 'user'@'host';
- 올바른 비밀번호로 로그인했는지 확인
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 관련 인사이트를 계속 공유할 예정이니 기대해 주세요! 🚀


