데이터베이스 사용자 생성 및 권한 관리
데이터베이스에서 사용자를 생성하고 적절한 권한을 설정하는 일은 보안과 효율적인 관리의 핵심입니다. 이 글에서는 MySQL을 중심으로 사용자 생성, 권한 부여, 권한 확인의 과정을 자세히 설명하겠습니다.
1. 데이터베이스 사용자 생성
MySQL에서는 CREATE USER 명령을 사용하여 새 사용자를 생성합니다.
예시
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password123';
- 'new_user'@'localhost': 사용자 이름과 접근 가능 위치(여기서는 로컬 호스트).
- IDENTIFIED BY 'password123': 사용자의 비밀번호 설정.
다른 접근 위치
- 모든 호스트에서 접속 가능: 'new_user'@'%'
- 특정 IP에서만 접속 가능: 'new_user'@'192.168.1.100'
2. 사용자 확인
MySQL에서는 mysql.user 테이블을 조회하여 사용자 정보를 확인할 수 있습니다.
예시
SELECT User, Host FROM mysql.user;
- User: 사용자 이름.
- Host: 해당 사용자가 접근할 수 있는 위치.
결과 예시
User |
Host |
root |
localhost |
new_user |
localhost |
3. 권한 설정
GRANT 명령을 사용하여 사용자에게 특정 권한을 부여합니다.
예시
GRANT [권한] ON [my_database].[my_table] TO 'new_user'@'localhost';
- my_database.my_table: 권한을 적용할 데이터베이스와 테이블.
3.1. 권한 종류
데이터베이스 및 테이블 작업 관련 권한
권한 |
설명 |
SELECT |
데이터를 읽는 권한을 부여합니다. (예: SELECT * FROM table_name;) |
INSERT |
데이터를 삽입할 수 있는 권한을 부여합니다. (예: INSERT INTO table_name ...) |
UPDATE |
기존 데이터를 수정할 수 있는 권한을 부여합니다. (예: UPDATE table_name SET ...) |
DELETE |
데이터를 삭제할 수 있는 권한을 부여합니다. (예: DELETE FROM table_name WHERE ...) |
CREATE |
새 데이터베이스나 테이블을 생성할 수 있는 권한입니다. (예: CREATE TABLE ...) |
DROP |
데이터베이스나 테이블을 삭제할 수 있는 권한입니다. (예: DROP TABLE ...) |
ALTER |
테이블의 구조를 변경할 수 있는 권한입니다. (예: ALTER TABLE table_name ...) |
INDEX |
테이블에 인덱스를 생성하거나 삭제할 수 있는 권한입니다. (예: CREATE INDEX ...) |
TRIGGER |
트리거를 생성하거나 삭제할 수 있는 권한입니다. |
LOCK TABLES |
테이블 잠금을 설정하여 다른 작업을 제한할 수 있는 권한입니다. |
프로시저와 함수 관련 권한
권한 |
설명 |
CREATE ROUTINE |
스토어드 프로시저와 함수를 생성할 수 있는 권한입니다. |
ALTER ROUTINE |
기존의 스토어드 프로시저와 함수를 수정할 수 있는 권한입니다. |
EXECUTE |
스토어드 프로시저와 함수를 실행할 수 있는 권한입니다. |
뷰(View) 관련 권한
권한 |
설명 |
CREATE VIEW |
뷰를 생성할 수 있는 권한입니다. (예: CREATE VIEW view_name AS ...) |
SHOW VIEW |
뷰의 정의를 조회할 수 있는 권한입니다. (예: SHOW CREATE VIEW view_name) |
데이터베이스 관리자 권한
권한 |
설명 |
GRANT OPTION |
다른 사용자에게 권한을 부여할 수 있는 권한입니다. |
CREATE USER |
새 사용자를 생성할 수 있는 권한입니다. (예: CREATE USER ...) |
DROP USER |
사용자를 삭제할 수 있는 권한입니다. |
RELOAD |
서버 설정을 다시 로드할 수 있는 권한입니다. (예: FLUSH PRIVILEGES) |
SHOW DATABASES |
서버에 존재하는 데이터베이스 목록을 볼 수 있는 권한입니다. |
복제와 관련된 권한
권한 |
설명 |
REPLICATION SLAVE |
슬레이브 서버가 마스터 서버로부터 데이터를 복제할 수 있는 권한입니다. |
REPLICATION CLIENT |
복제 상태를 확인하거나 로그 파일을 볼 수 있는 권한입니다. |
전체 서버와 관련된 권한
권한 |
설명 |
SUPER |
서버 관리자 권한으로, 대부분의 작업을 수행할 수 있습니다. |
FILE |
서버에서 파일을 읽거나 쓸 수 있는 권한입니다. (예: LOAD DATA INFILE) |
PROCESS |
현재 실행 중인 프로세스를 확인하거나 관리할 수 있는 권한입니다. |
기타 권한
권한 |
설명 |
EVENT |
이벤트 스케줄러를 생성하거나 관리할 수 있는 권한입니다. |
USAGE |
기본 권한으로, 아무 작업도 수행할 수 없도록 설정됩니다. |
모든 권한
권한 |
설명 |
ALL PRIVILEGES |
위의 모든 권한을 갖도록 설정됩니다. |
4. 권한 확인
MySQL에서는 SHOW GRANTS 명령을 사용하여 특정 사용자의 권한을 확인합니다.
예시
SHOW GRANTS FOR 'new_user'@'localhost';
결과 예시
GRANT SELECT, INSERT ON `my_database`.* TO 'new_user'@'localhost'
5. 권한 철회
REVOKE 명령을 사용하여 특정 권한을 철회합니다.
예시
REVOKE INSERT ON my_database.my_table FROM 'new_user'@'localhost';
6. 실생활 예시
6.1 웹 애플리케이션용 데이터베이스 사용자
- 사용자: web_app_user
- 권한: 애플리케이션에서 데이터 읽기/쓰기만 허용.
설정 예시 (MySQL)
CREATE USER 'web_app_user'@'%' IDENTIFIED BY 'secure_password';
GRANT SELECT, INSERT, UPDATE ON web_app_db.* TO 'web_app_user'@'%';
6.2 관리자용 데이터베이스 사용자
- 사용자: admin_user
- 권한: 데이터베이스의 모든 권한 허용.
설정 예시 (PostgreSQL)
CREATE ROLE admin_user WITH LOGIN PASSWORD 'admin_password';
GRANT ALL PRIVILEGES ON DATABASE company_db TO admin_user;
7. 마무리
데이터베이스 사용자와 권한 관리는 보안과 데이터 접근 제어의 핵심입니다. 필요에 따라 최소한의 권한만 부여하고, 주기적으로 권한을 점검하여 불필요한 접근을 차단하는 것이 중요합니다. 위 과정을 숙지하면 데이터베이스를 보다 안전하고 체계적으로 운영할 수 있습니다.