반응형

데이터베이스 사용자 생성 및 권한 관리

데이터베이스에서 사용자를 생성하고 적절한 권한을 설정하는 일은 보안과 효율적인 관리의 핵심입니다. 이 글에서는 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. 마무리

데이터베이스 사용자와 권한 관리는 보안과 데이터 접근 제어의 핵심입니다. 필요에 따라 최소한의 권한만 부여하고, 주기적으로 권한을 점검하여 불필요한 접근을 차단하는 것이 중요합니다. 위 과정을 숙지하면 데이터베이스를 보다 안전하고 체계적으로 운영할 수 있습니다.

반응형

'개발 부트캠프 > 데이터베이스' 카테고리의 다른 글

[DB] 스토어드 프로시저(Stored Procedure)  (0) 2024.12.02
[DB] 인덱스(Index)  (0) 2024.12.02
[DB] SQL 성능 확인  (0) 2024.12.02
[DB] ERD  (2) 2024.11.27
[DB] 정규화  (0) 2024.11.27

+ Recent posts