“MariaDB 사용자 계정 생성, 권한 설정” 잘못하면 큰일 납니다
들어가며
MariaDB를 처음 설치하고 개발을 시작하면 root 계정으로 접속해서 이것저것 작업하게 됩니다. 처음에는 크게 문제가 없어 보입니다. 데이터베이스도 만들 수 있고, 테이블도 생성할 수 있고, SELECT나 INSERT 같은 SQL도 마음대로 실행할 수 있습니다.
그런데 실제 서버 환경으로 넘어가면 이야기가 달라집니다.
애플리케이션에서 사용할 DB 계정과 관리자가 사용할 계정을 분리해야 하고, 사용자마다 필요한 권한도 다르게 설정해야 합니다. 특히 웹 애플리케이션이 root 계정으로 데이터베이스에 접속하도록 구성하는 것은 가급적 피하는 것이 좋습니다.
MariaDB에서는 CREATE USER로 계정을 생성하고 GRANT로 필요한 권한을 부여하는 방식을 기본으로 사용합니다.
1. MariaDB 사용자 계정은 왜 따로 만들어야 할까?
가장 먼저 이해해야 할 부분은 MariaDB의 사용자 계정과 데이터베이스 권한입니다.
예를 들어 쇼핑몰 서비스를 운영한다고 가정해 보겠습니다.
관리자는 데이터베이스의 테이블을 생성하거나 수정해야 할 수도 있습니다. 반면 웹 애플리케이션은 상품 조회, 회원 정보 조회, 주문 데이터 입력 정도만 필요할 수 있습니다.
그런데 두 사용자가 동일한 root 계정을 사용한다면 어떨까요?
애플리케이션의 설정이 노출되거나 계정이 탈취되는 순간 데이터베이스 전체가 위험해질 수 있습니다.
그래서 실무에서는 보통 다음과 같이 역할을 나눕니다.
- root : MariaDB 전체 관리
- 개발자 계정 : 개발에 필요한 데이터베이스 접근
- 애플리케이션 계정 : 서비스 운영에 필요한 최소 권한
- 읽기 전용 계정 : SELECT 중심의 조회 권한
이렇게 계정을 분리하면 관리가 훨씬 편해집니다.
2. MariaDB 사용자 계정 생성하기
사용자 계정을 생성할 때는 CREATE USER 명령을 사용합니다.
가장 기본적인 형태는 다음과 같습니다.
CREATE USER 'appuser'@'localhost'
IDENTIFIED BY '비밀번호';
여기서 appuser는 생성할 사용자 이름이고, localhost는 해당 사용자가 접속할 수 있는 호스트입니다.
예를 들어 다음과 같이 작성할 수 있습니다.
CREATE USER 'appuser'@'localhost'
IDENTIFIED BY 'StrongPassword123!';
여기서 중요한 것이 'appuser'@'localhost'라는 형식입니다.
MariaDB에서는 단순히 사용자 이름만 보는 것이 아니라 사용자 이름과 접속 호스트를 함께 계정으로 판단합니다.
따라서 다음 두 계정은 서로 다른 계정입니다.
'appuser'@'localhost'
'appuser'@'%'
첫 번째는 localhost에서 접속하는 경우를 의미하고, 두 번째는 허용된 환경에서 원격 접속이 가능하도록 설정한 계정입니다.
원격 접속을 허용한다고 무조건 %를 사용하는 것보다는 실제 필요한 IP나 네트워크 범위에 맞춰 제한하는 것이 안전합니다.
3. 생성된 사용자 확인하기
계정을 생성했다면 제대로 만들어졌는지 확인할 수 있습니다.
SELECT User, Host
FROM mysql.user;
특정 사용자만 확인하고 싶다면 다음과 같이 조회할 수도 있습니다.
SELECT User, Host
FROM mysql.user
WHERE User = 'appuser';
이때 동일한 사용자 이름이 여러 개 보일 수 있습니다.
예를 들어,
appuser | localhost
appuser | %
처럼 나타난다면 MariaDB에서는 서로 다른 계정으로 관리되고 있다는 뜻입니다.
4. 사용자에게 데이터베이스 권한 부여하기
사용자를 만들었다고 해서 해당 사용자가 모든 데이터베이스를 사용할 수 있는 것은 아닙니다.
필요한 권한은 GRANT 명령으로 부여합니다.
예를 들어 mydb라는 데이터베이스 전체를 사용할 수 있도록 권한을 부여하려면 다음과 같이 작성합니다.
GRANT ALL PRIVILEGES
ON mydb.*
TO 'appuser'@'localhost';
여기서 mydb.*는 mydb 데이터베이스에 포함된 전체 객체를 의미합니다.
즉, 다음과 같은 의미로 이해하면 쉽습니다.
mydb.*
↓
mydb 데이터베이스의 전체 테이블
그리고 ALL PRIVILEGES는 해당 범위에서 사용할 수 있는 여러 권한을 부여한다는 의미입니다.
다만 실제 운영 환경에서는 무조건 ALL PRIVILEGES를 주기보다는 애플리케이션에 필요한 권한만 부여하는 방법을 고려하는 것이 좋습니다.
5. SELECT, INSERT, UPDATE, DELETE만 필요한 경우
웹 애플리케이션에서 흔히 필요한 권한은 다음과 같습니다.
GRANT SELECT, INSERT, UPDATE, DELETE
ON mydb.*
TO 'appuser'@'localhost';
이렇게 하면 해당 계정에 데이터 조회와 입력, 수정, 삭제 권한을 줄 수 있습니다.
반대로 조회만 필요한 계정이라면 더욱 간단합니다.
GRANT SELECT
ON mydb.*
TO 'readonly'@'localhost';
이런 방식으로 권한을 최소화하면 실수나 계정 노출이 발생했을 때 피해 범위를 줄이는 데 도움이 됩니다.
6. 현재 사용자에게 어떤 권한이 있는지 확인하기
MariaDB에서 특정 계정의 권한을 확인할 때는 SHOW GRANTS를 사용합니다.
SHOW GRANTS FOR 'appuser'@'localhost';
실무에서 상당히 자주 사용하는 명령입니다.
“분명 권한을 줬는데 왜 안 되지?”
이런 문제가 발생했다면 가장 먼저 실제 권한이 어떻게 설정되어 있는지 확인하는 것이 좋습니다.
특히 사용자 이름만 보고 판단하지 말고 Host까지 정확하게 확인해야 합니다.
7. 권한을 변경하거나 삭제하는 방법
이미 부여한 권한을 제거해야 하는 경우에는 REVOKE를 사용합니다.
예를 들어 DELETE 권한을 제거하려면 다음과 같이 할 수 있습니다.
REVOKE DELETE
ON mydb.*
FROM 'appuser'@'localhost';
사용자 자체를 삭제해야 한다면 DROP USER를 사용합니다.
DROP USER 'appuser'@'localhost';
여기에서도 중요한 점은 User와 Host를 정확하게 지정하는 것입니다.
appuser라는 이름만 보고 삭제하려고 하면 원하는 계정이 삭제되지 않을 수 있습니다.
8. MariaDB 사용자 권한 설정에서 자주 하는 실수
MariaDB 권한 설정을 하다 보면 비슷한 문제가 반복해서 발생합니다.
가장 흔한 것이 바로 계정을 생성하고 권한을 부여하지 않는 경우입니다.
CREATE USER 'appuser'@'localhost'
IDENTIFIED BY '비밀번호';
여기까지만 실행했다고 해서 appuser가 원하는 데이터베이스를 사용할 수 있는 것은 아닙니다.
따라서 필요한 권한을 별도로 부여해야 합니다.
또 하나는 localhost와 %를 혼동하는 것입니다.
'appuser'@'localhost'
와
'appuser'@'%'
는 같은 의미가 아닙니다.
그리고 운영 서버에서 무심코 모든 데이터베이스에 대한 권한을 부여하는 것도 주의해야 합니다.
예를 들어,
GRANT ALL PRIVILEGES ON *.*
TO 'appuser'@'%';
와 같은 설정은 매우 강력한 권한을 부여합니다.
개발 테스트 환경에서는 편할 수 있지만 운영 환경에서는 정말 필요한지 먼저 생각해 보는 것이 좋습니다.
9. 권한은 ‘필요한 만큼만’ 주는 것이 기본
MariaDB 사용자 권한을 설정할 때 가장 기억해 둘 원칙은 최소 권한 원칙입니다.
애플리케이션이 특정 데이터베이스만 사용한다면 그 데이터베이스에만 권한을 주는 것이 좋습니다.
예를 들어 애플리케이션이 shop 데이터베이스만 사용한다면,
GRANT SELECT, INSERT, UPDATE, DELETE
ON shop.*
TO 'shopapp'@'localhost';
처럼 범위를 제한할 수 있습니다.
반면 관리 작업이 필요한 별도의 관리자 계정에는 더 많은 권한을 부여할 수 있습니다.
결국 중요한 것은 모든 사용자에게 같은 권한을 주는 것이 아니라 각 사용자가 실제로 해야 하는 작업에 맞춰 권한을 나누는 것입니다.
10. MariaDB 계정 생성과 권한 설정 기본 정리
MariaDB에서 사용자 계정을 관리하는 기본 흐름은 생각보다 단순합니다.
먼저 계정을 생성합니다.
CREATE USER 'appuser'@'localhost'
IDENTIFIED BY '비밀번호';
그다음 필요한 권한을 부여합니다.
GRANT SELECT, INSERT, UPDATE, DELETE
ON mydb.*
TO 'appuser'@'localhost';
그리고 실제 권한을 확인합니다.
SHOW GRANTS FOR 'appuser'@'localhost';
필요하지 않은 권한이 있다면 REVOKE로 제거하고, 더 이상 사용하지 않는 계정은 DROP USER로 삭제합니다.
정리하면 다음과 같습니다.
CREATE USER
↓
사용자 계정 생성
↓
GRANT
↓
필요한 권한 부여
↓
SHOW GRANTS
↓
권한 확인
↓
REVOKE / DROP USER
↓
불필요한 권한 및 계정 정리
MariaDB를 처음 사용할 때는 root 계정 하나로 모든 작업을 처리하는 것이 편해 보입니다. 하지만 프로젝트가 커지고 서버가 실제 서비스 환경으로 넘어가면 계정과 권한을 분리해야 할 필요성이 커집니다.
특히 웹 애플리케이션에서 사용하는 DB 계정은 관리자 계정과 분리하고, 필요한 데이터베이스와 필요한 작업에만 권한을 주는 것이 좋습니다.
MariaDB 사용자 계정 생성은 어렵지 않습니다. 중요한 것은 계정을 만드는 것보다 ‘어디까지 권한을 줄 것인가’를 결정하는 것입니다.
처음부터 사용자별 역할과 권한 범위를 명확하게 정해두면 나중에 서버를 운영하거나 장애를 확인할 때도 훨씬 수월합니다.
홍TV



![Eclipse에서 갑자기 "[m2e] Lifecycle Mapping" 오류? Maven 프로젝트가 빨간 줄 뜨는 이유 4 Eclipse에서 갑자기 [m2e] Lifecycle Mapping 오류? Maven 프로젝트가 빨간 줄 뜨는 진짜 이유](https://hongtv.co.kr/wp-content/uploads/2026/09/62edeb0f-aaf8-42cc-af31-1a91e54bc187-300x200.png)
댓글 0
첫 댓글을 남겨보세요.