본문 바로가기
개발/Database

사용자 권한 주기 (GRANT)

by BellOne4222 2024. 2. 7.

root 사용자 암호 설정

SET PASSWORD FOR 'root'@'localhost' = password_option; # root 계정에서

SET PASSWORD = password_option; # 현재 사용자

 

DBMS에서 제공하는 보안

  • 허가받지 않은 사용자, 즉 권한이 없는 사용자로부터 데이터의 접근을 사전에 차단

 

데이터베이스에서의 사용 권한

  • 사용자가 데이터베이스 내의 특정 객체에 대해 특정 연산을 실행할 수 있는 권리
    • 특정 객체 : 테이블, 필드, 뷰, 저장 프로시저 등 데이터베이스의 구성 요소

 

권한 제어가 가능한 연산의 종류

  • 데이터 접근 관련 연산 (DML)
    • SQL의 select, insert, delete, update 등
  • 스키마 관련 연산 (DDL)
    • create table, alter table, drop table, create index 등

권한에 따른 사용자 분류

 데이터베이스 관리자(DBA)

- 데이터베이스 내의 모든 객체에 대해 모든 권한을 가짐

- 객체에 대한 연산, 객체의 삭제와 변경 포함

- 사용자에게 해당 객체에 대한 권한을 부여하거나 회수 가능

 객체 소유자(owner)

- 객체를 생성한 사용자

- 생성한 객체에 대해 모든 권한을 소유

- 해당 객체에 대한 권한의 부여나 회수도 포함

 기타 사용자

- 기본적으로 다른 사용자의 객체에 대한 일체의 사용권한이 없음

- 다만 데이터베이스 관리자나 객체 소유자로부터 일부 또는 모든 권한을 별도로 부여받을 수 있음

 

 

 

명령어 종류 명령어 설명 

 
데이터 조작어
(DML :  Data Manipulation Language
SELECT  데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것으로 RETRIEVE 라고도 함
INSERT
UPDATE
DELETE 
데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류(데이터 삽입, 수정, 삭제)의 명령어들을 말함.
 데이터 정의어
(DDL : Data Definition Language)
CREATE
ALTER
DROP
RENAME
TRUNCATE 
테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 (생성, 변경, 삭제, 이름변경) 데이터 구조와 관련된 명령어들을 말함.
데이터 제어어
(DCL : Data Control Language) 
GRANT
REVOKE 
데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어들을 말함.
트랜잭션 제어어
(TCL : Transaction Control Language)
COMMIT
ROLLBACK
SAVEPOINT 
논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어를 말함.
 

 

GRANT

  • GRANT 권한 리스트 ON 객체명 TO 사용자 리스트
CREATE USER test_user IDENTIFIED BY 'test';

GRANT SELECT ON study_db.color TO test_user;
  • test_user는 study_db 데이터 베이스의 color 테이블에 대해 SELECT 할 수 있는 권한을 가진다.

 

  • 특정 데이터 베이스에 대한 권한 주기
GRANT SELECT, INSERT ON study_db.* TO a_user;
GRANT ALL ON study_db.* TO a_user;
GRANT SELECT ON *.* TO a_user;
  • GRANT ALL ON 객체명 TO 사용자 리스트
    • 데이터 베이스의 모든 테이블에 대해 모든 권한을 준다.

  • 여러가지 권한
# 역할 만들어 권한 부여하기

CREATE ROLE insert_manager;
GRANT INSERT, SELECT ON some_db.* TO insert_manager;
GRANT insert_manager TO b_user;


# 권한을 수여할 권한 부여하기

GRANT ALL ON study_db.* TO test_user WITH GRANT OPTION;
  # WITH GRANT OPTION을 주면 test_user 가 가진 권한을 남에게 줄 수 있음(현재는 root에서 test_user에게 권한을 주었음)


# 역할을 수여알 권한 부여하기
# WITH GRANT OPTION과 비슷하게 역할 또한 수여 가능하다.
GRANT inser_manager TO c_user WITH ADMIN OPTION;


# 사용자 생성과 동시에 권한 부여하기

GRANT SELECT ON ab_db TO e_user IDENTIFIED BY 'abcd33232';

ROLE

  • 특정 테이블에 대한 권한을 부여해야 할 사용자가 많다면, 반복적으로 GRANT 문이나 REVOKE 문을 실행해야 하는 문제가 발생한다.
  • 단순 반복 작업을 줄이기 위해 권한별로 사용자 그룹을 만들어 그룹에 권한을 부여하는 방법
  • 데이터베이스 관리자만 생성 가능하다.
  • CREATE ROLE 역할 이름

 

WITH GRANT OPTION(WITH ADMIN OPTION)

  • 부여받은 권한을 다른 사용자에게 전파할 수 있는 특별한 옵션
  • 부여받은 권한을 다른 사용자에게 다시 전파 할 수 있는 자격까지 부여한다.

 

REVOKE

  • 다른 사용자에게 부여한 권한을 회수하기 위한 명령
  • REVOKE 권한 리스트 ON 객체명 FROM 사용자 리스트
REVOKE SELECT ON ab_db.* FROM c_user;
  # c_user로 부터 ab_db 데이터 베이스의 모든 테이블에 대해 SELECT 할 권한을 제거한다.

REVOKE GRANT OPTION ON SELECT ON ab_db.* FROM c_user
  # c_user로 부터 권한을 수여할 권한만 없앤다.
  

REVOKE SELECT ON ab_db.* FROM a_user CASCADE;
REVOKE SELECT ON ab_db.* FROM a_user RESTRICT;

  # 위 : a_user가 다른 사람에게 수여한 모든 권한을 없앤다.
  # 아래 : a_user의 권한만 없앤다.
  • CASCADE
    • 다른 사람에게 부여한 모든 권한을 없앰
    • DEFAULT 값
  • RESTRICT
    • 대상 권한만 없앰

'개발 > Database' 카테고리의 다른 글

PK FK UK CK  (0) 2024.02.15
트랜잭션, 뷰, Date  (0) 2024.02.07
유니온(UNION), 서브 쿼리  (0) 2024.02.06
조인 : JOIN (INNER, OUTER, CROSS, SELF)  (0) 2024.02.05
외래 키 설정하기, 1NF (테이블 쪼개기)  (0) 2024.02.04