권한과 역할 (PRIVILEGE & ROLE)

Joy🌱·2023년 1월 18일
0

🐚 Oracle

목록 보기
9/11
post-thumbnail

💁‍♀️ 사용자 관리 & 보안을 위한 데이터 베이스 관리자란,

  • 사용자 관리
    : 사용자의 계정과 암호 설정, 권한 부여
  • 보안을 위한 데이터 베이스 관리자
    : 사용자가 데이터 베이스의 객체(테이블, 뷰 등)에 대해 특정 권한을 가질 수 있게 하는 권한이 있음. 다수의 사용자가 공유하는 데이터 베이스 정보에 대한 보안 설정.

👀 권한(PRIVILEGE)

👉 시스템 권한

💁‍♀️ 시스템 권한이란,
데이터베이스 관리자가 가지고 있는 권한으로 오라클 접속, 테이블, 뷰, 인덱스 등의 생성 권한

  • CREATE USER(사용자 계정 만들기)
  • DROP USER(사용자 계정 삭제)
  • CREATE SESSION(데이터베이스에 접속)
  • CREATE TABLE(테이블 생성)
  • CREATE VIEW(뷰 생성)
✅ 계정 생성

CREATE USER C##계정명 IDENTIFIED BY 비밀번호;

-- < 시스템 계정으로 실행 >
CREATE USER C##SAMPLE IDENTIFIED BY SAMPLE; 
✅ 접속 권한 부여

GRANT CREATE SESSION TO C##계정명;

>>> 생성한 SAMPLE 계정으로 접속 시도 시 접속 권한(CREATE SESSION)이 없기 때문에 접속 불가
>>> SAMPLE 계정에게 접속 권한 부여

-- <시스템 계정으로 실행>
GRANT CREATE SESSION TO C##SAMPLE;
✅ 테이블 생성 권한 부여

GRANT CREATE TABLE TO C##계정명;

-- <샘플 계정으로 실행> 
>>> 실행 시, '권한이 불충분합니다' 오류 (테이블 생성 권한이 부여 안됨)

CREATE TABLE TSET_TABLE(
    COL1 VARCHAR(20)
,   COL2 NUMBER
);
>>> 테이블 생성 권한이 없어 생성 불가하므로 권한 부여
-- <시스템 계정으로 실행>
GRANT CREATE TABLE TO C##SAMPLE;
✅ 샘플 계정으로 테이블 생성 시도
-- <샘플 계정으로 실행>
>>> 실행 시, 생성완료

CREATE TABLE TSET_TABLE(
    COL1 VARCHAR(20)
,   COL2 NUMBER
);
✅ WITH ADMIN OPTION

WITH ADMIN OPTION : 사용자에게 시스템 권한을 부여할 때 사용
권한을 부여받은 사용자는 다른 사용자에게 권한을 지정할 수 있음

-- <시스템 계정으로 실행>
GRANT CREATE SESSION TO C##SAMPLE
WITH ADMIN OPTION;

>>> SAMPLE도 접속 권한을 줄 수 있는 상태가 됨
✅ C##SAMPLE2 계정 생성
-- <시스템 계정으로 실행>
CREATE USER C##SAMPLE2 IDENTIFIED BY SAMPLE2;
✅ 샘플계정이 샘플2계정에게 접속 권한 부여
-- <샘플 계정으로 실행>
GRANT CREATE SESSION TO C##SAMPLE2; >>> 시스템 계정 뿐만 아니라 샘플 계정도 
									>>> 샘플2 계정에게 접속 권한을 줄 수 있음
GRANT CREATE TABLE TO C##SAMPLE2;	>>> 그렇다고 TABLE 생성 권한까지 부여받은건 아님
									>>> '권한이 불충분합니다' 오류

📌 Ref.

*  샘플 계정이 WITH ADMIN OPTION으로 부여 받은 CREATE SESSION은 다른 사용자에게 
   부여 가능하나, 그 외의 권한은 부여할 수 있는 권한 X

👉 객체 권한

💁‍♀️ 객체 권한이란,
사용자가 특정 객체(테이블, 뷰, 시퀀스, ...)를 조작하거나 접근할 수 있는 권한

DML(SELECT/INSERT/UPDATE/DELETE)
GRANT 권한 종류(EX.SELECT, INSERT, UPDATE, DELETE) [(컬럼명)] | ALL(모든 객체 권한)
ON 객체명(EX.C##EMPLOYEE.EMPLOYEE) | ROLE명(EX.C##MYROLE)
TO 사용자명(EX.C##SAMPLE) | PUBLIC(모든 사용자)
✅ WITH GRANT OPTION

WITH GRANT OPTION : 사용자가 특정 객체를 조작하거나 접근할 수 있는 권한을 부여받으면서 그 권한을 다른 사용자에게 다시 부여할 수 있는 권한 옵션

-- <직원관리계정에서 실행>
GRANT SELECT ON C##EMPLOYEE.EMPLOYEE TO C##SAMPLE
WITH GRANT OPTION;
>>> SAMPLE계정에게 EMPLOYEE 테이블에서 셀렉할 수 있는 권한 및 
>>> 다른 계정에게 권한을 다시 부여할 수 있는 권한을 줌
✅ 조회 권한을 부여 받았기 때문에 SAMPLE 계정에서도 EMPLOYEE 테이블 조회가 가능
-- <샘플 계정으로 실행>
SELECT
        EE.*
    FROM C##EMPLOYEE.EMPLOYEE EE;
✅ WITH GRANT OPTION으로 부여받은 SELECT 권한을 제외한 그 외 권한은 다른 계정에게 부여 X
GRANT SELECT ON C##EMPLOYEE.EMPLOYEE TO C##SAMPLE2; 
						>>> SAMPLE계정에서 SAMPLE2계정도 셀렉할 수 있게 권한을 줌
GRANT INSERT ON C##EMPLOYEE.EMPLOYEE TO C##SAMPLE2; 
						>>> '권한이 불충분합니다' 오류
✅ REVOKE (권한 철회)
>>>SAMPLE계정이 가진 셀렉 권한을 회수(철회)
-- <직원관리계정에서 실행>
REVOKE SELECT ON C##EMPLOYEE.EMPLOYEE FROM C##SAMPLE;
-- <샘플 계정으로 실행>
>>> 권한을 회수 했기 때문에 테이블 조회가 불가능

SELECT
        EE.*
    FROM C##EMPLOYEE.EMPLOYEE EE;
    >>> '테이블 또는 뷰가 존재하지 않습니다' 오류

📌 Ref. WITH GRANT OPTION과 WITH ADMIN OPTION의 차이

* 'WITH GRANT OPTION'은 REVOKE시 다른 사용자에게도 부여한 권한을 같이 회수
  - EX) SAMPLE이 SAMPLE2에게 줬던 SELECT 권한도 회수되어 SAMPLE2도 조회할 수 없게됨
* 'WITH ADMIN OPTION'은 특정 사용자의 권한만 회수되고 나머지 다른 사용자에게 부여한 권한은 회수되지 않음
  - EX) 회수된 계정만 회수되고 회수된 계정이 다른 계정한테 줬던 권한은 그대로 남아있음

👀 역할(ROLE)

💁‍♀️ 역할(ROLE)이란,
여러 개의 권한을 묶어 놓는 것

  • 사용자마다 일일히 권한을 부여하는 것은 번거롭기 때문에 간편하게 권한을 부여할 수 있는 방법으로 ROLE 제공
  • 사용자에게 부여한 권한을 수정하고자 할 때도 그 롤만 수정하면 해당 롤의 권한을 부여 받은 사용자들의 권한이 자동으로 수정

👉 사전 정의된 ROLE

오라클 설치 시 시스템에서 기본적으로 제공

  • EX) CONNECT, RESOURCE
-- <시스템 계정으로 실행>
SELECT
        GRANTEE
    ,   PRIVILEGE
    FROM DBA_SYS_PRIVS
--  WHERE GRANTEE = 'RESOURCE';
    WHERE GRANTEE = 'CONNECT';

💻 Mini Console

👉 사용자가 정의하는 ROLE

CREATE ROLE 명령으로 롤을 생성

  • 롤 생성은 반드시 DBA 권한이 있는 사용자만 가능
✅ 롤 생성

CREATE ROLE 롤이름;

CREATE ROLE C##MYROLE;
✅ MYROLE에게 권한 여러가지 부여

GRANT 권한종류 TO 롤이름;

GRANT CREATE VIEW, CREATE SEQUENCE TO C##MYROLE;
✅ MYROLE을 SAMPLE에게 부여

GRANT 롤이름 TO 사용자명;

GRANT C##MYROLE TO C##SAMPLE;
✅ C##MYROLE의 권한 확인
SELECT
        GRANTEE
    ,   PRIVILEGE
    FROM DBA_SYS_PRIVS
    WHERE GRANTEE = 'C##MYROLE';	>>> 부여된 두 가지 권한 확인 가능

💻 Mini Console

✅ C##SAMPLE 계정의 롤 권한 확인
SELECT
        DRP.*
    FROM DBA_ROLE_PRIVS DRP
    WHERE GRANTEE = 'C##SAMPLE';

💻 Mini Console

✅ 샘플계정이 시퀀스를 생성할 권한 부여 받은 것 확인
-- <샘플 계정으로 실행> : 접속 해제 후 재접속하여 테스트하면 객체 생성 가능
CREATE SEQUENCE SEQ_TEST;

>>> SAMPLE이 시퀀스 생성할 권한을 부여받았기 때문에 생성 완료

profile
Tiny little habits make me

0개의 댓글