ShovelingLife
A Game Programmer
ShovelingLife
전체 방문자
오늘
어제
  • 분류 전체보기 (1067)
    • 그래픽스 (57)
      • 공통 (19)
      • 수학 물리 (22)
      • OpenGL & Vulkan (1)
      • DirectX (14)
    • 게임엔진 (180)
      • Unreal (69)
      • Unity (100)
      • Cocos2D-X (3)
      • 개인 플젝 (8)
    • 코딩테스트 (221)
      • 공통 (7)
      • 프로그래머스 (22)
      • 백준 (162)
      • LeetCode (19)
      • HackerRank (2)
      • 코딩테스트 알고리즘 (8)
    • CS (235)
      • 공통 (21)
      • 네트워크 (44)
      • OS & 하드웨어 (55)
      • 자료구조 & 알고리즘 (98)
      • 디자인패턴 (6)
      • UML (4)
      • 데이터베이스 (7)
    • 프로그래밍 언어 (346)
      • C++ (167)
      • C# (88)
      • Java (9)
      • Python (33)
      • SQL (30)
      • JavaScript (8)
      • React (7)
    • 그 외 (9)
      • Math (5)
      • 일상 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Source Code 좌측 상단에 복사 버튼 추가 완료
  • 언리얼 엔진 C++ 빌드시간 단축 꿀팁
  • 게임 업계 코딩테스트 관련
  • 1인칭 시점으로 써내려가는 글들

인기 글

태그

  • C
  • 문자열
  • C++
  • Unity
  • 백준
  • string
  • 프로그래머스
  • 오블완
  • 그래픽스
  • c#
  • 유니티
  • SQL
  • 함수
  • 알고리즘
  • 언리얼
  • 파이썬
  • 클래스
  • 배열
  • 포인터
  • 티스토리챌린지

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ShovelingLife

A Game Programmer

[SQL] 보안, 권한 부여 grant, revoke, role
프로그래밍 언어/SQL

[SQL] 보안, 권한 부여 grant, revoke, role

2024. 10. 15. 22:17

개념

db 관리자는 db에 대한 접근 권한을 갖지 못한 사용자로부터 데이터를 안전하게 보호할 의무가 있음

DBMS에서 제공하는 보안

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

 

db에서의 사용 권한)

사용자가 db 내의 특정 객체에 대해 특정 연산을 실행할 수 있는 권리

- 특정 객체 : 테이블, 필드, 뷰, 저장 프로시저 등 db의 구성 요소

 

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

- 데이터 접근 관련 연산 (DML)

예) SQL의 select, insert, delete, update 등

- 스키마 관련 연산 (DDL)

예) create table, alter table, drop table, create index 등

권한에 따른 사용자 분류

db 관리자 (DBA)

- db 내의 모든 객체에 대해 모든 권한을 가짐

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

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

 

객체 소유자(owner)

- 객체를 생성한 사용자

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

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

 

기타 사용자

- 기본적으로 다른 사용자의 객체에 대한 일체의 사용권한이 없음, 다만 db 관리자나 객체 소유자로부터 일부 또는 모든 권한을 별도로 부여받을 수 있음.

SQL에서의 권한 제어 - GRANT

권한을 부여하는 명령

형식 : grant <권한 리스트> on <객체명> to <사용자 리스트>

<권한 리스트> : select, insert, delete, update, references 중 한 개 이상
<사용자 리스트> : 권한을 부여받는 사용자들의 리스트

◽ <사용자 리스트>에게 <객체명>에 대한 <권한 리스트>를 실행할 권리를 부여한다는 의미
예) 사용자 kim에게 student 테이블에 대해 select 연산을 수행할 수 있는 권한을 부여

grant select on student to kim

 

예) kim에게 student 테이블에 대한 select와 delete 권한을 동시에 부여

grant select, delete on student to kim

 

references 권한

- 테이블을 외래키로 참조할 수 있는 권한

권한이 없으면 kim이 생성한 student 테이블은 department 테이블을 외래키로 참조할 수 없음

 

references 권한 부여 예

grant references (dept_id) on department to kim

 

- dept_id는 테이블 department의 기본키

- kim은 department 테이블을 참조하는 외래키를 포함하는 테이블의 생성이 가능

 

모든 사용자에게 권한을 부여

<사용자 리스트>에 public 사용

 

예) student에 대해 모든 사용자들에게 select 권한을 부여

grant select on student to public

 

모든 종류의 권한을 하나의 명령으로 부여하는 방법

- all privileges 키워드 사용

 

예) student 테이블에 대한 모든 권한을 lee에게 부여

grant all privileges on student to lee

 

WITH GRANT OPTION

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

 

예) student 테이블에 대한 select 권한을 kim에게 부여함과 동시에 이 권한을 다른 사용자에게 다시 전파할 수 있는 자격까지 부여

grant select on student to kim with grant option

 

REVOKE

다른 사용자에게 부여한 권한을 회수하기 위한 명령

형식 : revoke <권한리스트> on <객체명> from <사용자 리스트>

<사용자 리스트> 에 속한 사용자들로부터 <객체명>에 대한 <권한리스트> 연산들의 실행 권한을 회수

 

예) kim에게 부여되었던 student 테이블에 대한 select 권한을 회수

revoke select on student from kim

 

ROLE

특정 테이블에 대한 권한을 부여해야 할 사용자가 많다면, 반복적으로 grant문이나 revoke을 실행해야하는 문제 발생, 단순 반복 작업을 줄이기 위해 권한별로 사용자 그룹을 만들어 그룹에 권한을 부여하는 방법이 필요

 

권한에 따른 사용자 그룹

롤은 db 관리자만이 생성 가능

형식 : create role <롤이름>

 

예) 사원가 임원에 대한 롤을 생성

create role employee
create role manager

 

롤에 사용자 배정

형식 : grant<롤리스트> to <사용자 리스트>

 

예) 사용자 lee와 kim은 사원, chang와 choi는 임원일 경우

grant employee to lee, kim
grant manager to chang, choi

 

롤에 권한을 부여

grant문과 형식은 동일

 

예) employee에게는 student 테이블에 대해 select 연산 허용하고, manager에게는 select와 insert 연산 허용

grant select on student to employee
grant select, insert on student to manager

 

롤에 부여된 권한을 회수

revoke문과 형식 동일

 

예) manager에게 부여된 insert 권한을 회수

revoke insert on student from manager

 

배정된 롤에서 사용자를 배제

형식 : revoke <롤리스트> from <사용자 리스트>

 

예) 사용자 choi를 manager로부터 배제

revoke manager from choi

 

롤 삭제

형식 : drop role <롤 이름>

 

뷰를 이용한 권한 제어

- 특정 테이블에서 일부 필드 혹은 일부 레코드들에 대해서만 접근을 허용할 경우 이 부분들을 뷰로 정의
- 정의된 뷰에 대해 접근 권한을 부여하고 실제 테이블에 대한 접근을 차단
- 사용자에게 감추고 싶은 부분에 대한 강력한 보안 수단 제공
- 필드뿐만 아니라 일부 레코드들에 대해서도 접근제어가 가능

 

https://nowes00.tistory.com/8

저작자표시 (새창열림)

'프로그래밍 언어 > SQL' 카테고리의 다른 글

[SQL] UNION / UNION ALL / UNION DISTINCT  (1) 2024.10.15
[SQL] CASE WHEN 조건 여러개 (다중 조건, 다중 칼럼)  (0) 2024.08.21
[SQL] CASE WHEN 표현식 사용법 (DECODE, IF)  (0) 2024.08.21
[SQL] 별칭 (Alias) 활용하기  (0) 2024.08.15
[SQL] 피봇에 대해 알아보자 (PIVOT, UNPIVOT)  (0) 2024.08.12
    '프로그래밍 언어/SQL' 카테고리의 다른 글
    • [SQL] UNION / UNION ALL / UNION DISTINCT
    • [SQL] CASE WHEN 조건 여러개 (다중 조건, 다중 칼럼)
    • [SQL] CASE WHEN 표현식 사용법 (DECODE, IF)
    • [SQL] 별칭 (Alias) 활용하기
    ShovelingLife
    ShovelingLife
    Main skill stack => Unity C# / Unreal C++ Studying Front / BackEnd, Java Python

    티스토리툴바